在Response.End()之后关闭窗口?

时间:2012-04-02 19:59:42

标签: javascript asp.net vb.net

我使用下面的代码下载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;")

如何关闭窗口?

4 个答案:

答案 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

相关问题