ASP.NET網(wǎng)頁模板的母版資源訪問
本文介紹如何在ASP.NET網(wǎng)頁模版中對內(nèi)容頁訪問母版頁的資源,還是舉例說明,不同的頁面在導(dǎo)航欄上應(yīng)該有不同的指示,比如當(dāng)前頁面是 A 頁面,導(dǎo)航欄的 A 應(yīng)該突出顯示。
母版資源頁代碼
- 〈%@ Master Language="C#" %〉
 - 〈!DOCTYPE html PUBLIC "-//W3C//DTD XHTML
 - 1.0 Transitional//EN" "http://www.w3.org/TR/
 - xhtml1/DTD/xhtml1-transitional.dtd"〉
 - 〈script runat="server"〉
 - public void SetCurNavItem(int itemIndex)
 - {
 - nav.Items[itemIndex].Attributes.CssStyle.
 - Add("color", "#FF0000");
 - }
 - 〈/script〉
 - 〈html xmlns="http://www.w3.org/1999/xhtml" 〉
 - 〈head runat="server"〉
 - 〈title〉Untitled Page〈/title〉
 - 〈/head〉
 - 〈body〉
 - 〈form id="form1" runat="server"〉
 - 〈div〉
 - 〈asp:ContentPlaceHolder id="m_header"
 - runat="server"〉
 - 〈asp:BulletedList ID="nav" runat="server"〉
 - 〈asp:ListItem Text="導(dǎo)航一"〉〈/asp:ListItem〉
 - 〈asp:ListItem Text="導(dǎo)航二"〉〈/asp:ListItem〉
 - 〈/asp:BulletedList〉
 - 〈/asp:ContentPlaceHolder〉
 - 〈asp:ContentPlaceHolder ID="m_content"
 - runat="server"〉在
 - 〈/asp:ContentPlaceHolder〉
 - 〈asp:ContentPlaceHolder ID="m_footer"
 - runat="server"〉
 - 〈p〉版權(quán)所有〈/p〉
 - 〈/asp:ContentPlaceHolder〉
 - 〈/div〉
 - 〈/form〉
 - 〈/body〉
 - 〈/html〉
 
ASP.NET網(wǎng)頁模板的內(nèi)容頁代碼
- 〈%@PageLanguage="C#"MasterPageFile="
 - MasterPage1.master"Title="首頁"%〉
 - 〈scriptrunat="server"〉
 - protectedvoidPage_Load
 - (objectsender,EventArgse)
 - {
 - ((ASP.masterpage1_master)Master).
 - SetCurNavItem(0);
 - }
 - 〈/script〉
 - 〈asp:ContentID="content"runat="server"
 - ContentPlaceHolderID="m_content"〉
 - 〈p〉這里是首頁的內(nèi)容〈/p〉
 - 〈/asp:Content〉
 
效果

可以看到,導(dǎo)航欄的***項突出顯示了。
更好的方法
ASP.masterpage1_master 是強制類型轉(zhuǎn)換,這樣使用起來似乎不是很方便,因為每次使用 Master 的地方都要重復(fù)地寫這些代碼,我們可以利用 MasterType 指令來實現(xiàn)。
- 〈%@PageLanguage="C#"MasterPageFile="
 - MasterPage1.master"Title="首頁"%〉
 - 〈%@MasterTypeVirtualPath="MasterPage1.master"%〉
 - 〈scriptrunat="server"〉
 - protectedvoidPage_Load(objectsender,EventArgse)
 - {
 - Master.SetCurNavItem(0);
 - }
 - 〈/script〉
 - 〈asp:ContentID="content"runat="
 - server"ContentPlaceHolderID="m_content"〉
 - 〈p〉這里是首頁的內(nèi)容〈/p〉
 - 〈/asp:Content〉
 
#p#
在上一頁已經(jīng)介紹過ASP.NET網(wǎng)頁模板訪問母版資源的兩種方法,其中第二種方法使用簡單快捷,但在某些情況下同樣顯得無能為力。
比如:一個頁面需要三種布局風(fēng)格,這可能就需要三個模板,由訪問者決定使用哪一個模板,也就是說在頁面開發(fā)的時候,還不知道將使用哪一個模板,使用 @ MasterType VirtualPath 也就無法確定 MasterPage 的類型。
我們可以這樣做:
◆建立一個基類。
◆各個模板頁派生自這個基類。
◆內(nèi)容頁通過 MasterPageFile 確定使用哪個模板,通過 @ MasterType TypeName 來使用基類類型處理這些模板的資源。
具體如下(只演示一個模板文件代碼):
基類文件代碼:
- usingSystem;
 - usingSystem.Web.UI;
 - namespaceMasterPageNameSpace
 - {
 - publicabstractclassMasterPageClass:
 - MasterPage
 - {
 - publicabstractvoidSetCurNavItem
 - (intitemIndex);
 - }
 - }
 
注意使用的名稱空間和類及方法的修飾限定符。
模板文件代碼:
- 〈%@MasterLanguage="C#"Src="m1.cs"
 - Inherits="MasterPageNameSpace.MasterPageClass"%〉
 - 〈!DOCTYPEhtmlPUBLIC"-//W3C//
 - DTDXHTML1.0Transitional//EN"
 - "http://www.w3.org/TR/xhtml1/DTD/
 - xhtml1-transitional.dtd"〉
 - 〈scriptrunat="server"〉
 - publicoverridevoidSetCurNavItem(intitemIndex)
 - {
 - nav.Items[itemIndex].Attributes.CssStyle.Add
 - ("color","#FF0000");
 - }
 - 〈/script〉
 - 〈htmlxmlns="http://www.w3.org/1999/xhtml"〉
 - 〈headrunat="server"〉
 - 〈title〉UntitledPage〈/title〉
 - 〈/head〉
 - 〈body〉
 - 〈formid="form1"runat="server"〉
 - 〈div〉
 - 〈asp:ContentPlaceHolderid="m_header"
 - runat="server"〉
 - 〈asp:BulletedListID="nav"runat="server"〉
 - 〈asp:ListItemText="導(dǎo)航一"〉〈/asp:ListItem〉
 - 〈asp:ListItemText="導(dǎo)航二"〉〈/asp:ListItem〉
 - 〈/asp:BulletedList〉
 - 〈/asp:ContentPlaceHolder〉
 - 〈asp:ContentPlaceHolderID="m_content"runat="server"〉
 - 在
 - 〈/asp:ContentPlaceHolder〉
 - 〈asp:ContentPlaceHolderID="m_footer"runat="server"〉
 - 〈p〉版權(quán)所有〈/p〉
 - 〈/asp:ContentPlaceHolder〉
 - 〈/div〉
 - 〈/form〉
 - 〈/body〉
 - 〈/html〉
 
我們也可以通過 CSC 把基類文件編譯成 DLL 放在 bin 目錄下,或者將 .cs 文件放在 App_Code 目錄下,然后指令中省略 Src。
ASP.NET網(wǎng)頁模板內(nèi)容文件代碼:
- 〈%@PageLanguage="C#"MasterPageFile="
 - MasterPage1.master"Title="首頁"%〉
 - 〈%@MasterTypeTypeName="
 - MasterPageNameSpace.MasterPageClass"%〉
 - 〈scriptrunat="server"〉
 - protectedvoidPage_Load(objectsender,EventArgse)
 - {
 - Master.SetCurNavItem(0);
 - }
 - 〈/script〉
 - 〈asp:ContentID="content"runat="
 - server"ContentPlaceHolderID="m_content"〉
 - 〈p〉這里是首頁的內(nèi)容〈/p〉
 - 〈/asp:Content〉
 
總結(jié)
我們訪問模板文件中的資源有三種方法:
◆程序中利用強制類型對 Master 進(jìn)行轉(zhuǎn)換;
◆利用 @ MasterType VirtualPath;
◆利用 @ MasterType TypeName。
【編輯推薦】















 
 
 
 
 
 
 