我使用下面的代码下载Excel文件。一旦Response.End()
调用运行,我想关闭窗口。但是,这种情况并没有发生。请参阅我目前的代码。
'Write it back to the client
Dim filename As String = "FullExtract_" & Now.Year.ToString & Now.Month.ToString & Now.Day.ToString & ".xlsx"
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AddHeader("content-disposition", "attachment; filename=" & filename)
Response.BinaryWrite(pck.GetAsByteArray())
Response.End()
'cursor not reaching to below code
Page.ClientScript.RegisterStartupScript(Me.GetType(), "closedownload", "JavaScript:window.close(); return false;")
如何关闭窗口?
答案 0 :(得分:1)
我遇到了类似的问题,请在下面检查我的答案,希望对您有帮助。
var popupWindow = window.open("endpoint","","setting");
var att = document.createAttribute("onblure"); // Create a "onblure" attribute
att.value = "window.close()"; // Set the value of the class attribute
popupWindow.setAttributeNode(att);
这将允许在出现下载窗口时关闭窗口
注意: 端点:是您的新窗口端点 设置:您的窗口设置,例如宽度,高度,顶部,左侧等。
答案 1 :(得分:0)
不要调用Response.End。抛出一个ThreadAbortException,这将导致各种令人讨厌的事情。此外,此异常是在Response.End不触发后阻止Page.ClientScript的原因。所以只需删除Response.End即可。它不再需要,也不再是旧的经典ASP时代的延续。
编辑:你不能那样关闭窗户;发送文件进行下载时,应在用户操作系统上打开文件保存提示,文件将下载。生成的html RegisterStartupScript最终会成为我认为的文件下载的一部分。你应该有一个页面,触发下载的按钮或链接使用target =“_ blank”或通过javascript打开一个新窗口,该窗口将根据浏览器自动关闭甚至不打开。答案 2 :(得分:0)
调用Response.End()
会停止执行页面,因此不会处理注册脚本的行。但是,我认为在将文件内容发送到浏览器之后应该调用Response.End()
,以使其正确接收文件。
为了关闭窗口,但允许下载文件,您可以尝试使用java脚本显示弹出窗口,然后关闭它,同时保持其父页面打开。
这里有一些解决类似问题的建议:
答案 3 :(得分:0)
首先,我认为你的关闭窗口脚本应该是这样的↓
Page.ClientScript.RegisterStartupScript(this.GetType(), "closedownload", "<script language='javascript'>window.opener=null;window.close();</script>");
然后,我认为为什么你不能在response.end()关于ASP.NET LIFE CYCLE
之后关闭窗口从上述文件中,我们可以了解订单
页面加载 - &gt;控制事件 - &gt;页面渲染。
1,您注册的javascript将在您的网页呈现后执行。
2,当您在事件中执行Response.End()(这将绝对停止页面生命周期执行)时,将永远不会触发页面呈现事件。
3,这就是为什么你不能在Response.End()之后关闭你的窗口。 IMHO