jquery post不允许在MVC应用程序中下载csv文件

时间:2012-05-03 23:13:09

标签: asp.net-mvc

我有一个有Jquery Post的MVC应用程序

$.post(virtualPath + cookie + this.pageName + '/FunctionA/', parameters,function (filedata) {
    alert(filedata);
    },'application/csv'); 
}

此帖子是从Javascript事件中调用的,该事件由按钮点击以下载文件

我得到服务器端Http文件响应 在警报中但无法在浏览器中下载

控制器以FileContentResult

的形式返回Response
[AcceptVerbs(HttpVerbs.Post)]
    public FileContentResult FunctionA(string A, DateTime B)
    {
        try
        {
            string csv = "Make it downloadable ";
            var filresult = File(new System.Text.UTF8Encoding().GetBytes(csv), "application/csv", "downloaddocuments.csv");
           // return filresult;

            Response.Clear();
            Response.Buffer = true;
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("content-disposition", "attachment; filename=Statement_" + "Downloadfile" + ".csv");
            Response.Write(csv);
            Response.Flush();
            return filresult;
        }
    }

1 个答案:

答案 0 :(得分:4)

您无法使用AJAX下载文件。原因是因为一旦下载成功并且调用了成功回调,您既不能自动将文件保存到客户端浏览器,也不能提示“另存为”对话框。

因此,不使用javascript和AJAX下载此文件,只需使用控制器操作的标准链接,即允许用户直接下载文件。


更新:

根据评论部分的要求,这是一个使用锚点的例子:

@Html.ActionLink(
    "download file", 
    "actionName",
    "controllerName",
    new {
        param1 = "value1",
        param2 = "value2",
    },
    null
)

或者如果您需要传递大量参数,您可能更愿意使用包含POST的隐藏字段的表单:

@using (Html.BeginForm("actionName", "controllerName"))
{
    @Html.Hidden("param1", "value1")
    @Html.Hidden("param2", "value2")
    <button type="submit">Download file</button>
}