ASP.NET實現(xiàn)用PageBase代替MasterPage
ASP.NET實現(xiàn)用MasterPage中的.cs文件 代替項目中的PageBase。
寫這篇文章的動機,來自于一次項目重構(gòu)。在.Net Framwork 2.0的B/S架構(gòu)項目中同時采用PageBase和MasterPage技術(shù),發(fā)現(xiàn)每次訪問頁面,頁面同時訪問PageBase和MasterPage,不僅造成性能降低,甚至有可能給日后的項目功能擴充和調(diào)整帶來邏輯錯誤隱患。
PageBase:.Net Framework 1.1 中經(jīng)常使用的一種封裝多個頁面相同功能的技術(shù)。PageBase.cs類繼續(xù)自System.Web.UI.Page類,項目中的Web頁面繼續(xù)自PageBase.cs類,通過重寫基類中的頁面初始化方法,實現(xiàn)調(diào)用PageBase中的業(yè)務(wù)功能,例如:url參數(shù)驗證,保存訪問量等功能(具體實現(xiàn)方式參見微軟官方例子duwamishi)。
MasterPage:.Net Framework 2.0 中新特性,物理上包括兩個文件,分別是:.Master文件(Html標記),.cs文件(C#代碼)。.Master文件實現(xiàn)顯示層繪制,.cs文件實現(xiàn)具體功能。繼續(xù)自MasterPage的Web頁面可以繼續(xù)MasterPage中的顯示層內(nèi)容。繪制通用的頁頭頁腳,定制統(tǒng)一的布局,MasterPage是不錯的選擇。
用MasterPage技術(shù),代替PageBase,ASP.NET實現(xiàn)地址欄參數(shù)驗證。
簡單的做個解釋吧
登錄系統(tǒng)之后,url地址欄中帶有參數(shù):
http://localhost:3730/MasterPageBaseDemo/TestPage.aspx?id=1001
此時用戶手動修改url地址欄中參數(shù)為:
http://localhost:3730/MasterPageBaseDemo/TestPage.aspx?id=1002
被視為非法操作,系統(tǒng)將自動跳轉(zhuǎn)回登錄頁面。
傳統(tǒng)的Page做法為:
- publicclassPageBase:System.Web.UI.Page
- {
- publicPageBase()
- {
- }
- /**////<summary>
- ///入口方法
- ///< SPAN>summary>
- protectedvoidInitialize()
- {
- //插入通用業(yè)務(wù)邏輯
- }
- }
Web頁面:
- publicpartialclassTestPage:PageBase
- {
- //傳統(tǒng)的調(diào)用PageBase的方法
- /**/////<summary>
- ///重寫基類OnPreInit()方法,調(diào)用通用驗證方法
- ///< SPAN>summary>
- ///<paramnameparamname="e">< SPAN>param>
- protectedoverridevoidOnInit(eventargse)
- {
- base.Initialize();
- }
- }
參照其做法,將PageBase中的代碼移入MasterPage中:
MasterPage.cs:
- publicpartialclassMyMasterPage:System.Web.UI.MasterPage
- {
- protectedvoidPage_Load(objectsender,EventArgse)
- {
- if(!IsPostBack)
- {
- //調(diào)用驗證方法
- Initialize();
- }
- }
- }
將Web頁面中的代碼修改為:
- publicpartialclassTestPage:System.Web.UI.Page
- {
- //仿照PageBase方法,調(diào)用Master中的方法
- /**////<summary>
- ///重寫基類OnPreInit()方法,調(diào)用通用驗證方法
- ///< SPAN>summary>
- ///<paramnameparamname="e">< SPAN>param>
- protectedoverridevoidOnInit(eventargse)
- {
- //獲得母板頁引用
- MyMasterPagemyMasterPage=(MyMasterPage)this.Master;
- //調(diào)用母板頁中通用驗證方法
- if(!IsPostBack)
- {
- myMasterPage.Initialize();
- }
- }
- }
以上介紹ASP.NET的PageBase和MasterPage
【編輯推薦】