2014-02-18 118 views
0

假設在ASP.NET .aspx頁面中,我有Page Load方法和另一種按鈕單擊事件的方法。ASP.NET會話和頁面生命週期

Page Load方法中,我通過檢查會話來檢查用戶是否登錄。無論他是否,我將結果存儲在全局變量中。

Boolean isGuest = false; 

protected void Page_Load(object sender, EventArgs e) { 

     if(Session["id"]==null) 
       isGuest = true; 
     else 
       isGuest = false; 
} 

讓我們說20分鐘過去了,我不知道如果會話已終止或沒有,然後我點擊一個按鈕,該事件是這樣的:

protected void Button_Click(object sender, EventArgs e) { 
      if(isGuest==false) 
       //do something 
      else 
       // do another thing 
} 

我的問題是:當我點擊該按鈕時,ASP.NET是否再次通過Page_Load方法(再次檢查isGuest),或者它只是執行Button_Click方法中的內容,即,它使用的Boolean isGuest可能是false,但實際上會話終止,意味着它應該是true

+2

爲什麼不簡單測試呢? – RononDex

+0

@RononDex它被測試和工作,但我只是想確保沒有任何錯誤。 –

回答

4

Page_Load被觸發總是在之前控制事件。

看一看:ASP.NET Page Life Cycle Overview

側面說明:如果你想要做的事情只在第一負載,而不是你要檢查IsPostBack財產的每個回發。

-3

您可以:

  1. UserID定義自己的類,以及其他配置文件屬性;
  2. 該類添加到會話在Global.asax會議開始的活動,Session["NameReferingToYourClass"] = new YourClass();
  3. 一個成員變量中,如果你需要的鑄造頁面生命週期早期mYourClass = Session["NameReferingToYourClass"]設爲您的會話對象;
  4. 然後,您可以在您的成員變量可用的代碼中的任何位置對您的班級進行任何更改;
  5. 將所有更改的課程存回Page.Unload(..){ Session["NameReferingToYourClass"] = mYourClass

您使用的是類屬性在你的代碼,包括UserId,很像一個Windows應用程序通過這種方式,將有在你的代碼沒有會話其他地方的提。

+0

這似乎與問題提出的問題完全無關。 –