2

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

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

这篇文章是从 Javascript 事件中调用的,该事件由单击按钮触发以下载文件

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

控制器将响应返回为 FileContentResult

[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;
        }
    }
4

1 回答 1

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>
}
于 2012-05-04T05:53:07.987 回答