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