回发后执行 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 事件订阅