私のAsp.netWebフォームサイトには、ユーザーがさまざまなオプションを選択するフォームがあり、それらのオプションは、PDFレポートを生成し、次のコードを介してダウンロードするためにそのファイルをユーザーに送り返すポストバックで返送されます。
protected void btnTopGenReport_Click(object sender, EventArgs e)
{
var stream = new PodMainReportGenerator().GenerateReport(GetReportParameters());
var bytes = stream.ToArray();
stream.Close();
// Set the content headers
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=testReport.pdf");
Response.AddHeader("Content-Length", bytes.Length.ToString());
Response.BinaryWrite(bytes);
Response.End();
}
問題は、必要なデータと処理の量のために、このレポートの生成に10秒ほどかかる可能性があることですが、人々が焦ってボタンを何度もクリックすることを望んでいません。
通常のページでは、クリック時にボタンを無効にするJavaScriptを追加します。これが機能するのは、ポストバックが完了すると、サーバーがフォームボタンを再度有効にして戻ってくるためです。ただし、フォームの応答はHTMLページではなく、ダウンロードされたファイルであるため、検出方法がわかりません。
基本的に、フォームのボタンを無効にし、サーバーから応答を受け取ったら(そして、httpファイル転送が開始されたら)再度有効にするにはどうすればよいですか?