前言:
對於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**方法。這樣方便多層繼承。