我有一个提交时会下载生成的csv文件的表格。我在页面上有一个asp:Literal作为占位符,用于加载文本:
<div id="loading-text">
<asp:Literal ID="litLoadingText" runat="server"></asp:Literal>
</div>
$("input[type=submit]").on("click", function() {
//$(".loading-modal").show();
$("#loading-text").html("Loading...");
});
,在下载完成后,我试图更改文本,说“完成!”。或只是被移除:
Response.Clear();
Response.Buffer = true;
var fileName = !String.IsNullOrEmpty(txtFileName.Value) ? txtFileName.Value : "ContentExport";
Response.AddHeader("content-disposition", String.Format("attachment;filename={0}.xls", fileName));
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
using (StringWriter sw = new StringWriter())
{
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
litLoadingText.Text = "Done!";
}
,但文字没有改变。我很确定这是由于下载,我正在执行Response.End()和诸如此类的事情,但是我不确定如何处理它。是否可以在C#中执行此操作,或者可以使用Javascript方法来检测何时完成下载?最好的方法是什么?
答案 0 :(得分:0)
Response.End方法终止页面执行并将执行转移到应用程序事件管道中的Application_EndRequest事件。响应.End之后的代码行未执行。
此问题在``响应。重定向''和``服务器。传输''方法中发生,因为两种方法都在内部调用``响应。结束''。
要变通解决此问题,请使用下列方法之一:
对于Response.End,请调用HttpContext.Current.ApplicationInstance.CompleteRequest方法而不是Response.End,以将代码执行绕过Application_EndRequest事件。
对于Response.Redirect,请使用重载的Response.Redirect(String url,bool endResponse),为endResponse参数传递false来禁止内部调用Response.End。例如:
Response.Redirect ("nextpage.aspx", false);
如果使用此替代方法,则将执行“ Response.Redirect”后面的代码。
对于Server.Transfer,请改用Server.Execute方法。