我有一个以下列方式返回(下载)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;”,表示答复未完成。
任何想法我做错了什么?
答案 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;
});