2010-11-16 174 views
2

例如,我有一個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

回答

1

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

Response.Redirect("close.html")

哪裏close.html只是有

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

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

0

試試這個:

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

微軟自己say到Response.End即有隻是爲了向後兼容:

此方法僅設置有用於 兼容性ASP,也就是說,對於 兼容基於COM的 網頁編程技術 先於ASP.NET

不知道它會解決你的問題,但至少微軟不會有藉口.. :)

+0

謝謝,但沒有奏效 – eych 2010-11-16 21:18:16

3

由俄德提供的答案不從Page_Load中工作,我不知道爲什麼。由eych提供的答案是有效的。然而,如果你不想保留一個額外的html文件並重定向,你可以使用類似於:

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