ファイルの処理中に読み込みアイコンを表示するファイルをダウンロードする必要があります(時間がかかるかどうかわからないため)。iframeを使用することにしました。コードは正常に実行されますが、問題はファイルのダウンロードダイアログボックスが表示されないこと。
IE、Firefox、Chromeでテストしましたが、いずれも機能していません。
これが私のコードです:
意見:
<table id="progress" style="visibility:hidden">
<tr>
<td>
<img src="~/Content/Images/ajax-loader.gif" />
</td>
<td>
<h4>please wait.</h4>
</td>
</tr>
</table>
<div class="buttons">
<input type="button" value="Ok" class="button" id="downloadButton">
</div>
<iframe id="iframe" style="visibility:hidden"></iframe>
<script>
$(document).ready(function () {
$('#downloadButton').click(function () {
$('#progress').show();
$('input:button').attr("disabled", true);
$('#iframe').src = "@Url.Action("GenerateFile", "Files", null)";
$('#iframe').load("GenerateFile", function () {
$('input:button').attr("disabled", false);
$('#progress').hide();
});
});
});
</script>
サーバー側のアクション:
[HttpGet]
public void GenerateFile(Filters viewModel)
{
var result = GetCustomers().WithName(viewModel.Name);
StringBuilder file = new StringBuilder();
foreach (var customer in result)
{
// fill up the string builder with csv format
}
System.Web.HttpContext.Current.Response.AddHeader("content-disposition","attachment; filename=Customers.csv");
System.Web.HttpContext.Current.Response.ContentType = "application/csv";
System.Web.HttpContext.Current.Response.Write(file);
System.Web.HttpContext.Current.Response.End();
}
助けていただければ幸いです、ありがとう!