gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:43 26 4
gpt4 key购买 nike

我有一个表单,可以在提交时下载生成的 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.Redirect 和 Server.Transfer 方法中,因为这两种方法都在内部调用 Response.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 方法。

关于C# Postback - 发送下载后在页面上设置文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51108679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com