天天看點

關于頁面事件重寫問題

前言:

對于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); 

                //開始驗證

                }  

        }

結論:

重寫時盡量用override重寫On**方法。這樣友善多層繼承。

本文轉自 王傑瑞 51CTO部落格,原文連結:http://blog.51cto.com/wangjierui/117609,如需轉載請自行聯系原作者

繼續閱讀