我似乎无法触发下载文件操作结果。我有以下代码。
HTML:
<td align="right">
<label class ="excelLink">Export to excel</label>
</td>
JavaScript:
$('.excelLink').click(function () {
var url = '@Url.Content("~/Controller/ExcelExport")';
var statusFilters = new Array();
var meterFilters = new Array();
$('[name="CheckBox"]:checked').each(function () {
statusFilters.push($(this).val());
});
$("#lstMeters option:selected").each(function () {
meterFilters.push($(this).text());
});
$.ajax({
url: url,
type: 'POST',
traditional: true,
dataType: 'json',
data: {
'code1': $("#code1").val(),
'code2': $("#code2").val(),
'city': $("#city").val(),
'date': $("#date").val(),
'meterFilter': meterFilters,
'statusFilter': statusFilters
},
})
});
控制器:
public async Task<FileResult> ExcelExport(string code1, string code2, string city, string date,
string[] meterFilter, string[] statusFilter)
{
DateTime parsedDate = DateTime.MinValue;
if (!String.IsNullOrEmpty(date))
{
parsedDate = DateTime.Parse(date);
}
var records = await DataService.GetData(code1, code2, city, parsedDate, meterFilter, statusFilter);
return DataExcelExport.ExcelExport(records);
}
在 ExcelExport 方法中,返回:
return dataExcelExport.WriteToFile(package, fileName);
调用此方法:
private FileResult WriteToFile(ExcelPackage package, string fileName)
{
return File(new MemoryStream(package.GetAsByteArray()), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);
}
一切正常,直到它返回 FileResult 并且前端没有任何反应。我们用不需要多个参数的 Razor ActionLink 实现了相同的东西,并且可以很好地触发文件的下载。
我究竟做错了什么?