通过按钮和javascript下载文件

时间:2017-09-18 14:29:54

标签: javascript asp.net-mvc

我有一个以下列方式返回(下载)excel文件的操作:

 public IActionResult CreateExcelFile(string id, int xx, string start, string end) {

//Some additional code...
// ....
// ....
        var file = File(doc, "application/vnd.ms-excel");
        file.FileDownloadName = filename + " " + id + ".xlsx";
        return file;
}

到目前为止,我已从以下视图触发此操作:

<div id="myDiv">Some Content</div>

最后是JavaScript:

$(function excelFunction() {

  $('#myDiv').click(function () {

    alert("Initiate excel export")
    var start = $('#startDateTextBox').val();
    var end = $('#endDateTextBox').val();

    $.ajax({
        type: 'GET',
        url: '/Customer/CreateExcelFile',
        data: { id: 'FVM10000', xx: '4', start: start, end: end },
        success: function (response) {
            if (response.type == "success") {
                alert("success")
            }
            else {
                // Do something else
                alert("failure")
            }
        }
    });
  });
});

我进入调试模式,看到确实使用正确的参数调用了操作,但是,执行操作后,不会返回(或下载)任何文件。我收到一条警告信息,说“&#34;失败&#34;”,表示答复未完成。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:3)

不要使用ajax进行文件下载。对您的操作方法执行正常的HTTP请求。

$('#myDiv').click(function () {

    var start = $('#startDateTextBox').val();
    var end = $('#endDateTextBox').val();
    var url='/Customer/CreateExcelFile?id=FVM10000&xx=4&start='+start+'&end='+end;
    window.location.href=url;
});

我还建议使用html helper方法生成操作方法基本部分的正确相对路径。您可以执行Url.Action辅助方法并将此调用的结果存储在div中的html 5数据属性中。

<div id="myDiv" data-url="@Url.Action("CreateExcelFile","Customer")">Some Content</div>

现在在脚本中读取此值并执行查询字符串连接。

$('#myDiv').click(function () {

    alert("Initiate excel export")
    var start = $('#startDateTextBox').val();
    var end = $('#endDateTextBox').val();
    var url=$(this).data("url")+"?id=FVM10000&xx=4&start="+start+"&end="+end;
    window.location.href=url;
});