在Response.End后关闭窗口

问题描述:

例如,我有一个ListView的窗体处于编辑模式。
发生了一些事情,因此Listview正在使用的表不再可用。
我只希望能够关闭窗口,如果用户点击'保存'。在Response.End后关闭窗口

In Page_Load,我检查表是否可用,如果没有,我打电话RegisterClientScriptBlock(type,name,"window.close()").但是,处理仍然发生,并且它转到L istView1_ItemUpdating event

Page_Load中,如果该表不存在,我可以调用Response.End来停止处理,但是由于脚本从未注册,窗口仍然保持不变。

任何方式来停止处理和关闭窗口,而不必将自定义IsTableValid()检查在我所有的方法?

+0

你是否尝试过使用Response.Flush? – ryudice 2010-11-16 20:15:08

+0

是的,见下面... – eych 2010-11-16 20:29:37

一个解决方案,kludgey,但可以在其他地方使用:

Response.Redirect("close.html")

哪里close.html只是有

<script> 
    window.close(); 
    </script> 

Flush应对所有数据发送到浏览器结束之前:

RegisterClientScriptBlock(type,name,"window.close()") 
Response.Flush() 
Response.End() 

您可能要Clear注册脚本,以之前的响应,以确保有没有别的在响应缓冲区。

还有ClearHeadersClearContent方法,如果你只想清除一个而不是另一个。

+0

尝试过,但它仍然留下一个空的窗口。 (也试过清除) – eych 2010-11-16 20:21:18

+0

@eych - HTML源代码是什么样的?你得到任何JavaScript错误?某些窗口无法通过脚本关闭(例如,通常,只有当您使用脚本打开窗口时,才能通过脚本关闭窗口)。 – Oded 2010-11-16 20:22:34

+0

窗口最初是用脚本打开的,并且没有javascript错误。我有一个单独的'关闭'按钮,单击时,也调用相同的RegisterClientScript(...)方法,并且工作,关闭窗体[我猜是因为Button_Click后没有更多的处理]。 – eych 2010-11-16 20:28:34

试试这个:

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

微软自己say到Response.End即有只是为了向后兼容:

此方法仅设置有用于 兼容性ASP,也就是说,对于 兼容基于COM的 网页编程技术 先于ASP.NET

不知道它会解决你的问题,但至少微软不会有借口.. :)

+0

谢谢,但没有奏效 – eych 2010-11-16 21:18:16

由俄德提供的答案不从Page_Load中工作,我不知道为什么。由eych提供的答案是有效的。然而,如果你不想保留一个额外的html文件并重定向,你可以使用类似于:

Response.Clear(); 
Response.Write("<script>window.close();</script>"); 
Response.Flush(); 
Response.End();