ダウンロード ファイル アクション結果をトリガーできないようです。次のコードがあります。
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 を使用しました。
私は何を間違っていますか?