關於頁面事件重寫問題

前言:
對於ASP.NET編程,事件模型是入門知識。頁面事件,咱們一般用得最多的是Load事件,可是實際上頁面還有Init,Render等事件可用。事件的發生順序能夠參照MSDN。本篇不談順序,而是談事件的重寫。
問題:
網站中有不少頁面是須要權限驗證的,即非登錄用戶無權訪問。若是咱們一頁一頁的在PageInit事件中處理權限會很是麻煩,常見的設計就是們將這部分頁面抽象出一個共同的父類RightPage,在父類中寫一次PageInit的處理便可,那麼凡是繼承RightPage的頁面都自動具有了權限驗證功能。
試驗:
RightPage類代碼以下:
public class RightPage : System.Web.UI.Page
{
void Page_Init(object sender, EventArgs e)
        {
                //檢查用戶是否已經登陸
                Data.UserInfo ui = (Data.UserInfo)Session[ "userinfo"];
                //若是沒有登陸則導航到登陸頁面。
                 if (ui == null)
                {
                        Response.Redirect( "~/UserLogin.aspx");
                }
        }
}
這是利用了ASP.NET默認事件方法,命名規則通常是Page_事件名。好比咱們常見的Page_Load就表示Page的Load事件發生時要執行的代碼。在之前的ASP.NET Web應用程序模式下,還能夠看到Page.Load+=new EventHandler這樣的語句,而在ASP.NET網站模式下就難看到了。
這種方法的優勢是實現簡單,容易理解。缺點是不方便多層次繼承中的重寫,由於這種默認方法中不能使用base關鍵字。固然,你能夠使用實時綁定的辦法來實現上述效果,這樣就能夠避免使用Page_**方法了。
 
第二種方法是重寫On**方法:
         protected override void OnLoad(EventArgs e)
        {
                 base.OnLoad(e);
                 //開始驗證
                //檢查用戶是否已經登陸
                Data.UserInfo ui = (Data.UserInfo)Session[
"userinfo"];
                //若是沒有登陸則導航到登陸頁面。
                
if (ui == null)
                {
                        Response.Redirect(
"~/UserLogin.aspx");
                } 
 

        }
結論:
重寫時儘可能用override重寫On**方法。這樣方便多層繼承。
相關文章
相關標籤/搜索