回发后执行 Javascript,并在 C# 中清除响应

Posted

技术标签:

【中文标题】回发后执行 Javascript,并在 C# 中清除响应【英文标题】:Execute Javascript after postback with cleared response in C# 【发布时间】:2014-12-12 16:56:49 【问题描述】:

当用户单击我网站上的按钮时,我会在服务器端创建一个 excel 文件并将其写入响应中。

HttpResponse httpResponse = Page.Response;
httpResponse.ClearHeaders();
httpResponse.ClearContent();
httpResponse.Clear();
httpResponse.Buffer = true;
httpResponse.AppendHeader("Content-Disposition",
"attachment; " +
"filename=\"" + fileName + "\";");
httpResponse.ContentType = "application/vnd.xlsx";
httpResponse.Charset = "";

using (MemoryStream memoryStream = new MemoryStream())

    workbook.SaveAs(memoryStream);
    memoryStream.WriteTo(httpResponse.OutputStream);
    memoryStream.Close();


httpResponse.Flush();
httpResponse.End();

当我写完这个文件后,我想运行一个 javascript 脚本块,但我似乎无法完成这个工作。我听说当我清除响应时,我无法使用Page.ClientScript.RegisterStartupScript(已弃用?)编写脚本块,因为用户没有得到与响应相同的页面,但我希望有一个解决方法。

进行回发和获取文件的按钮不在 UpdatePanel 中,因此我无法使用那里实现的 PageRequestManager.add_endRequest 函数。而且我无法将控件放入 UpdatePanel,因为它不允许我在异步回发中写入文件。

还有其他方法可以在回发结束时触发 javascript 函数吗?检查回发是否正在进行(或完成)的 JavaScript 间隔函数也是一种可接受的解决方案(但据我所知,JavaScript 无法“检查”同步回发是否正在进行中)。

【问题讨论】:

查看this 和this 了解此问题的一些解决方法(问题:文件下载没有浏览器事件) 天哪,真是天才。有用。谢谢!您可以将其作为答案提交,如果您愿意,我会尽可能接受。 【参考方案1】:

Response.End() 中止线程并将执行发送到 Application_EndRequest。 在那之后什么都做不了。您可以下载文件或执行 javascript。但是有这个解决方案使用iframes。

【讨论】:

以上是关于回发后执行 Javascript,并在 C# 中清除响应的主要内容,如果未能解决你的问题,请参考以下文章

回发后,我的 JavaScript 函数在 ASP.NET 中不起作用

UpdatePanel 异步回发后的 Javascript 事件订阅

从 UpdatePanel 异步回发后,嵌入式 javascript 不起作用

在gridview中回发后Javascript代码不会运行

回发后asp.net jquery脚本未运行

如何在 jquery 中自动回发后维护选定的选项卡?