我有一个 asp.net 应用程序,我试图在其中写出一个 csv。一旦对话框显示或之后没有区别,我只是想显示一些消息,说明一切顺利。我正在尝试触发一些 javascript 来简单地更改元素的样式以及一些测试以表明下载成功。
下载工作正常,我就是这样做的,但也相信这是导致我的问题的原因:
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "inline; filename=myFile.csv");
Response.Charset = "";
Response.ContentType = "text/csv";
FileInfo fileToDownload = new FileInfo(filename);
Response.WriteFile(filename);
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
Response.End();
System.Web.UI.ScriptManager.RegisterStartupScript(this, this.GetType(), "s_DisplayLongRunningQueryComplete", "DisplayLongRunningQueryComplete();", true);
如果我将注册启动脚本的最后一行移动到它自己的按钮,那么可以说我没有任何问题并且工作正常。我也曾尝试将其移至上述火灾之前,但没有成功。
有人知道如何使这项工作有效吗?
谢谢。
最佳答案
你在这方面有几个问题:
1- 您正在下载一个文件,并且在您的响应中您正试图注入(inject) javascript 代码以与文件缓冲区一起执行。 System.Web.UI.ScriptManager.RegisterStartupScript
使用您尝试执行的 javascript 将 HTML Script 标记添加到响应中。
2- Response.End()
是另一个问题。假设您的响应不是文件下载(例如),一旦您调用此函数,将不会处理任何其他内容,因此不会调用任何网络资源。
如何解决:
您确实必须重构您的代码才能解决此问题。也许尝试以下操作:
- 更改代码以下载文件而不调用脚本。
- 通过 jQuery ajax 从客户端调用下载。
- 下载成功后调用 javascript 代码。
关于c# - 下载后启动javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845723/