我有一个MVC应用程序,它有一个Jquery Post。
$.post(virtualPath + cookie + this.pageName + '/FunctionA/', parameters,function (filedata) {
alert(filedata);
},'application/csv');
}
这篇文章是从Javascript事件调用的,该事件由按钮单击以下载文件触发
我收到服务器端 http 文件响应在警报中,但无法在浏览器中下载
控制器将响应作为文件内容结果返回
[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;
}
}
不能使用 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>
}