状況によっては、実行に数分かかる場合がある FileResult コントローラー アクションがあります。メッセージ、スピナー、進行状況バーなど、アクションが実行中であることをユーザーに視覚的に示したいと考えています。問題は、アクションが完了したことをフロントエンドで「検出」する方法を理解するのに苦労していることです。
私は FileResult アクションへの Ajax 呼び出しをいじっていますが、Ajax はブラウザーにファイルを返すことができないため、うまくいきません。Asynchronous Actions and Tasks も調べましたが、FileResult は必要な "await" キーワードをサポートしていないようです。
現時点では、次に何を試すべきかわかりませんが、考えやアイデアに対して非常にオープンです。
編集:
bobekが提案したように、これを機能させました。基本的に、PDF ファイルをディスクに保存し、ファイル パスを ActionResult Content(fullFilePath) として返します。次に、私のページで、このようなものを使用して、アクションの実行中に小さなスピナー gif を表示し、完了後にファイルへのリンクを表示しました。
var img = $("img#reportLoadingIcon");
var link = $('a#exportedFileLink');
link.hide();
img.show();
$.ajax({
url: url,
success: function (result) {
link.attr({target: '_blank', href: result});
link.show();
img.hide();
}
});