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