在我的 Asp.net webforms 站点中,我有一个表单,用户可以在其中选择各种选项,这些选项会在回发中发回,该回发会生成 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 文件传输)就重新启用它们?