Я не могу вызвать результат действия файла загрузки. У меня есть следующий код.
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, который не требует нескольких параметров и который прекрасно запускает загрузку файла.
Что я делаю не так?