2011-10-01 64 views
1

當用戶離開頁面時,它會再次觸發Page_Load事件。如何在code_behind中告訴我們這種情況正在發生,以避免運行自定義函數,因爲Page_Load中的代碼在離開頁面時並不需要運行?檢測用戶何時離開Page_Load事件的頁面

+0

如何在用戶離開頁面,因爲剛剛換到另一個URL通過一個HREF不會觸發回傳? – Christian

+0

切換asp.net選項卡容器中的選項卡頁面。我在每個選項卡上都有一個不同的頁面(iframe)。所以當一個標籤被激活時,它會從前一個標籤中激發Page_Load事件。 – TroyS

+0

使用Luke的答案!ispostback – Christian

回答

2

當用戶離開它觸發Page_Load事件的再次

什麼做一個頁面你的意思是通過離開一個頁面?關閉瀏覽器或點擊瀏覽器上的後退按鈕?或移動到另一頁? Page_Load方法在加載頁面上時或在同一頁面上發生回發時觸發,但不會離開它。

在開始任何操作之前,您可以(也應該)確保客戶端仍處於連接狀態並使用HttpResponse.IsClientConnected屬性。

  1. 到客戶端的連接被終止:當滿足下列條件爲真

    的IsClientConnected屬性返回false。如果調用Close方法,或者客戶端停止執行Web頁面或瀏覽到其他頁面,就會發生這種情況。

  2. 處理請求的HttpWorkerRequest對象爲空,或者HttpWorkerRequest.IsClientConnected方法返回false。如果自定義的HttpWorkerRequest對象處理該請求,則可以根據自定義條件設置HttpWorkerRequest.IsClientConnected方法。例如,自定義工作請求可能會在一段時間後強制超時。

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.isclientconnected.aspx

編輯

切換標籤通常火災正常回發,檢測到它,你應該使用:

private void Page_Load(object sender, System.EventArgs e) 
{ 
    if (!Page.IsPostback) 
    { 
     //this is first load of this page 
    } 
} 
+0

切換asp.net標籤容器中的標籤頁。我在每個選項卡上都有一個不同的頁面(iframe)。所以當一個標籤被激活時,它會從前一個標籤中激發Page_Load事件。 – TroyS

+0

@tszro。好的,我編輯了我的答案。我希望我的答案的第一部分也可以是有用的。 – Dariusz

+0

經過進一步調查,該頁面最初已加載到每個選項卡中,因此IsPostBack只能按時評估爲真。然後,當選項卡頁面被激活時,前一選項卡中的網頁將評估IsPostBack = False,因爲該頁面已被加載。所以我想我必須設置一個會話變量來保存活動標籤頁的名稱,並用它來(運行或不運行)每個頁面中的特定代碼。不知道這是否對任何人有任何意義。 – TroyS

1

如果我理解正確的問題,你要尋找的IsPostBack屬性:

 
private void Page_Load() 
{ 
    if (!IsPostBack) 
    { 
     // Any code here will only run the first time the page is loaded 
    } 
}