繁体   English   中英

C#回发-发送下载后在页面上设置文本

[英]C# Postback - set text on page after sending download

我有一个表单,提交后会下载生成的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方法来检测何时完成下载? 最好的方法是什么?

问题在这里描述: https : //support.microsoft.com/en-us/help/312629/prb-threadabortexception-occurs-if-you-use-response-end-response-redir

原因

Response.End方法结束页面执行,并将执行转移到应用程序的事件管道中的Application_EndRequest事件。 Response.End之后的代码行未执行。

由于两个方法都在内部调用Response.End,因此在Response.Redirect和Server.Transfer方法中会发生此问题。

解析度

要变通解决此问题,请使用下列方法之一:

对于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方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM