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



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

最新更新