2013-03-04 84 views
5

當我們轉到另一頁時運行的事件是什麼。它卸載了嗎?Asp.net中的析構函數

Protected Sub Edit_Unload(sender As Object, e As EventArgs) Handles Me.Unload 

End Sub 
+6

無法保證任何活動將會運行。 – 2013-03-04 16:57:40

+0

而對於「析構函數」,頁面實例的_finalizer_經常在用戶看到頁面之前運行。請記住,一個頁面實例只能持續一個http請求的生命。即使是同一會話中的同一頁面的回發也是由不同的實例處理的。頁面實例運行頁面生命週期來生成發送給瀏覽器的html。一旦這個html準備好併發送完畢,頁面實例就可以被GC收集。有時,這發生在瀏覽器甚至可以呈現對顯示器的響應之前。 – 2013-03-04 16:59:49

+2

導航到另一個頁面發生在客戶端,而不是服務器端。一旦您在瀏覽器中看到該頁面,就不再涉及服務器。除非您使用某種服務器端鏈接,如「LinkBut​​ton」,否則不存在與從一個頁面導航到另一個頁面相關的服務器端事件。即使這樣,您也無法控制用戶只需在瀏覽器中輸入其他網址並完全繞過服務器重定向。 – mellamokb 2013-03-04 17:02:02

回答

3

Unload是在ASP.NET Page Lifecycle的最後一個事件。

docs

提高了每個控件,然後頁面。在控件中,使用此事件爲特定控件執行最終清理,例如關閉控制特定的數據庫連接,即 。對於頁面本身,請使用此事件進行最終清理工作,如關閉打開的文件和數據庫連接,或完成日誌記錄或其他 特定於請求的任務。

但是,當重定向到另一個頁面時,可能不會調用此方法。

+0

這與導航到其他頁面有什麼關係? – mellamokb 2013-03-04 16:59:37

+0

@mellamokbtheWise啊,似乎我誤讀了。我會編輯答案。 – 2013-03-04 17:00:45

3

Unload發生在請求結束時*。它與導航到其他頁面沒有任何關係。頁面在單個請求的過程中「加載」和「卸載」;除此之外,唯一的原因就是Web Forms在幕後做的事。

如果要查看這是新的加載還是回發,則Page類的IsPostBack屬性在頁面中的某些內容觸發回發到同一頁面時爲true。如果它是錯誤的,那麼這是一個新的請求,應該適當處理。

除此之外,我不知道的方式告訴當有人專門去另一個頁面(而不是僅僅刷新當前頁面),除了跟蹤會話訪問的最後一頁。

*(它被定義爲在頁面生命週期的最後一場比賽,但是如果要求提前終止因任何原因可能不會閃光。重定向和傳輸是最好的例子。)

1

此鏈接可能是對你有用:Page Life Cycle Overview。雖然你不能依賴運行的事件,但這是一個很好的指導,可以顯示它們運行的​​順序(以及時間)。

0

如果您希望在頁面離開時捕獲事件,可以使用javascript調用服務器方法。雖然這可行,但它似乎不能阻止服務器代碼中的進程。看看我的最後一個線程,我開始:

preventing page from being redirected

在這裏面,我也張貼瞭如何使用JavaScript來檢測頁面即將離開,並調用服務器方法在這之前發生的例子。