2012-04-02 118 views
2

我使用下面的代码来下载Excel文件。一旦Response.End()调用运行,我想关闭窗口。但是,这没有发生。请参阅下面的代码。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

当你调用'Response.End'时,它会停止执行页面,所以它不会进一步处理页面。看看这个:http://msdn.microsoft.com/en-us/library/system.web.httpresponse.end.aspx。 – 2012-04-02 20:05:14

+0

关闭窗口的任何建议。 – James123 2012-04-02 20:06:07

回答

0

不要调用Response.End。抛出一个ThreadAbortException,这将导致各种令人讨厌的事情。另外,这个异常是在Response.End不能触发后阻止你的Page.ClientScript。所以只需删除Response.End。它不再需要,并且从传统的ASP经典时代开始。

编辑:你不能关闭那样的窗口;当您发送文件进行下载时,应该在用户操作系统上打开文件保存提示,并且该文件将会下载。生成的RegisterStartupScript将作为文件下载的一部分。您应该可能拥有触发下载的按钮或链接的页面,使用target =“_ blank”或通过javascript打开一个新窗口,该窗口会根据浏览器自动关闭或不打开。

+0

我删除了'Response.End()',并且控件进入'Page.ClientScript。RegisterStartupScript'但窗口不关闭。看到代码无法正常工作 – James123 2012-04-02 20:14:02

0

调用Response.End()会停止页面的执行,因此只注册脚本的行不会被处理。但是,我想Response.End()应该在向浏览器发送文件内容之后调用,以便它能够正确接收文件。

为了关闭窗口,但允许下载文件,可以尝试使用java脚本来显示一个弹出窗口,然后关闭它,同时打开它的父页面。

有一个类似的问题在这里的解决方案提出了一些建议:

0

首先,我认为你关闭窗口脚本应该是这样↓

Page.ClientScript.RegisterStartupScript(this.GetType(), "closedownload", "<script language='javascript'>window.opener=null;window.close();</script>"); 

然后,我想你为什么不能关闭窗口到Response.End后()是关于ASP.NET LIFE CYCLE

从上面的文件,我们可以学习的顺序

页面加载 - >控制事件 - >页面渲染

1,您已注册的JavaScript将在您的页面被渲染时执行。 2,当你在事件中执行Response.End()(这将绝对停止页面生命周期执行)时,页面呈现事件永远不会被触发。

3,这就是为什么你不能在Response.End()后关闭你的窗口的原因。恕我直言