在Response.End后关闭窗口
例如,我有一个ListView
的窗体处于编辑模式。
发生了一些事情,因此Listview正在使用的表不再可用。
我只希望能够关闭窗口,如果用户点击'保存'。在Response.End后关闭窗口
In Page_Load
,我检查表是否可用,如果没有,我打电话RegisterClientScriptBlock(type,name,"window.close()").
但是,处理仍然发生,并且它转到L istView1_ItemUpdating event
。
在Page_Load
中,如果该表不存在,我可以调用Response.End来停止处理,但是由于脚本从未注册,窗口仍然保持不变。
任何方式来停止处理和关闭窗口,而不必将自定义IsTableValid()
检查在我所有的方法?
一个解决方案,kludgey,但可以在其他地方使用:
Response.Redirect("close.html")
哪里close.html
只是有
<script>
window.close();
</script>
Flush
应对所有数据发送到浏览器结束之前:
RegisterClientScriptBlock(type,name,"window.close()")
Response.Flush()
Response.End()
您可能要Clear
注册脚本,以之前的响应,以确保有没有别的在响应缓冲区。
还有ClearHeaders
和ClearContent
方法,如果你只想清除一个而不是另一个。
尝试过,但它仍然留下一个空的窗口。 (也试过清除) – eych 2010-11-16 20:21:18
@eych - HTML源代码是什么样的?你得到任何JavaScript错误?某些窗口无法通过脚本关闭(例如,通常,只有当您使用脚本打开窗口时,才能通过脚本关闭窗口)。 – Oded 2010-11-16 20:22:34
窗口最初是用脚本打开的,并且没有javascript错误。我有一个单独的'关闭'按钮,单击时,也调用相同的RegisterClientScript(...)方法,并且工作,关闭窗体[我猜是因为Button_Click后没有更多的处理]。 – eych 2010-11-16 20:28:34
由俄德提供的答案不从Page_Load中工作,我不知道为什么。由eych提供的答案是有效的。然而,如果你不想保留一个额外的html文件并重定向,你可以使用类似于:
Response.Clear();
Response.Write("<script>window.close();</script>");
Response.Flush();
Response.End();
你是否尝试过使用Response.Flush? – ryudice 2010-11-16 20:15:08
是的,见下面... – eych 2010-11-16 20:29:37