jquery - 如何通过 Jquery 调用 MVC FileContentResult 并让它提示用户在返回时保存?

标签 jquery asp.net-mvc-3 model-view-controller filecontentresult

我正在从 MVC 3 网站生成 CSV,并使用 FileContentResult 将其传递给用户。这效果很好,但生成 csv 需要 30 秒,因此在提示用户保存之前需要 30 秒。

    public virtual FileContentResult GetSpreadsheet(string id)
    {
        var service = new SpreadsheetService();
        var result = service.GetCSV();
        return File(new System.Text.UTF8Encoding().GetBytes(result.Message), "text/csv", "Report123.csv");
    }

所以我想我应该通过 JQuery 调用它 - 但这(毫不奇怪!)只是将 CSV 转储到页面。

            $.post("/Home/GetSpreadsheet/" + id, null, function (data) {
                $('#resultDiv').html(data);
            });

有谁知道我现在已经取回数据后如何生成保存提示?谢谢

最佳答案

你不能这么做。把它给忘了。无法使用 AJAX 下载文件。事实上,AJAX 调用将起作用,您将访问服务器,服务器将文件内容发送回客户端,AJAX 成功回调将被触发并作为参数传递文件的内容,这就是您的一切结束的地方。由于绝对显而易见的原因,使用 javascript 您无法将文件直接保存到客户端计算机,并且无法提示“另存为”对话框。

因此,无需使用 AJAX,只需创建一个 anchor 即可:

@Html.ActionLink("download spreadsheet", "GetSpreadsheet", new { id = "123" })

现在,如果服务器将 Content-Disposition header 设置为 attachment,浏览器将提示用户下载文件并将其保存在计算机上的某个选定位置。

关于jquery - 如何通过 Jquery 调用 MVC FileContentResult 并让它提示用户在返回时保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9821856/

相关文章:

jquery - 使用下拉列表的 Ajax.beginform 回发表单

asp.net-mvc - MVC 架构中的项目何时应该拥有自己的 Controller ?

Java Swing : How to build Connect 4 GUI

关于 TableView 和构建自定义类模型的 iPhone MVC 问题

javascript - 先前元素列表的 CSS 应用于 javascript 中的新元素列表

javascript - 将输入文本更改为符号

c# - ASP.Net MVC3 下拉列表和传递数据

java - 多个 JButton 的 MVC 模式

jquery - 单击图像时如何更改缩放图标?

jQuery - 显示/隐藏 - 检查是否已设置