MVC4:如何在使用Ajax时强制浏览器的默认下载对话框

时间:2014-02-04 21:37:52

标签: ajax asp.net-mvc asp.net-mvc-4

MVC4:目标:当用户点击链接时:在内存中创建CSV文件类型的数据,并向用户显示浏览器的默认下载对话框,以允许用户在他的系统上保存为CSV文件。 使用以下代码时:浏览器的默认下载对话框不显示(在Chrome和IE中测试)。由于用户点击链接,视觉上没有任何反应。 在这种情况下如何强制浏览器的默认下载对话框?

MyView.cshtml

<div>
    @Html.Partial("_MyTableView", Model)
</div>


@section scripts{
    <script type="text/javascript">

        function downloadMyCSV() {
                alert("start download");  // pops-up

                $.ajax({
                    type: "POST",
                    url: "@Url.Action("DownLoadMyCSV", "Home", new { Area ="MyArea" })",
                    data: {}, 
                    traditional: true,
                    success: function (data) { 
                        alert(data);   // shows data as commadelimited string                         

                    }

                });
         }


    </script>

}

_MyTableView.cshtml

    <a href="#" id="btnDowloadCsv" onclick="downloadMyCSV()">Download my CSV</a>

HomeController.cs

public FileContentResult DownLoadMyCSV()
    {
        string csv = "John, Steven, Smith";
        return File(new System.Text.UTF8Encoding().GetBytes(csv), "text/csv", "myreport123.csv");
    }

在这种情况下如何强制浏览器的默认下载对话框? 谢谢

1 个答案:

答案 0 :(得分:0)

我们只有两种方法可以解雇csv。首先是一个重定向到csv下载的回发,但这并不理想。第二种方式是一个空白目标的链接。像这样的东西

<a href="@Url.Action("Action", "Controller")" target="_blank">Download Links(csv)</a>

新页面无法打开,但会触发下载对话框。我们尝试的其他所有内容都会在控制器上调用该方法,但下载对话框从未显示在ui上。希望这有帮助