現自定義page基類時需要注意的地方

現自定義page基類時需要注意的地方

自定義Page集類可以帶來很多好處,如統一處理Cookie,安全性,參數等。不過在繼承System.Web.UI.Page實現自己的BasePage時需要注意一點:謹慎的處理構造器(Constructor)中涉及的代碼。如果疏忽了這點,可能會導致你在Vs.Net中無法所見即所得的編輯Aspx頁面,打開頁面時將拋出以下錯誤,你只能看到Html代碼界面。

 

導致這一錯誤的最大可能的原因就是你在BasePage的構造器裏使用了HttpContext的內容。而Vs.Net在顯示所見即所得的Aspx頁面時會初始化你的BasePage類,這時候如果使用了Request,Response等類時,由於HttpContext並不存在(因爲不是在IIS環境中,沒有PageFactory傳遞過來Http上下文),所以在初始化類時就拋出了NullReferenceException。

爲了解決此問題,最好將訪問HttpContext的代碼放到OnInit中,如下:

  protected override void OnInit(EventArgs e)
  {
      base.OnInit (e);
      HttpCookieCollection cookies = HttpContext.Current.Request.Cookies;
  }

這一override方法指示在PageHandler階段被首先調用,而Vs.Net顯示頁面時並不會調用此方法,所以不會產生NullReferenceException。

如果你確實需要在構造器中進行某些Field的初始化等工作,這時又需要使用Request等內容,那麼就需要先判斷HttpContext是否爲Null。如下:

 public class BasePage : Page
 {
    public BasePage()
    {
         if(HttpContext.Current != null)
         {
             HttpCookieCollection cookies = HttpContext.Current.Request.Cookies;
         }
     }
  }


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章