我有一个有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;
}
}
答案 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>
}