本文介绍如何在ASP.NET网页模版中对内容页访问母版页的资源,还是举例说明,不同的页面在导航栏上应该有不同的指示,比如当前页面是 A 页面,导航栏的 A 应该突出显示。
母版资源页代码
〈%@ 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="导航一"〉〈/asp:ListItem〉
〈asp:ListItem Text="导航二"〉〈/asp:ListItem〉
〈/asp:BulletedList〉
〈/asp:ContentPlaceHolder〉
〈asp:ContentPlaceHolder ID="m_content"
runat="server"〉在
〈/asp:ContentPlaceHolder〉
〈asp:ContentPlaceHolder ID="m_footer"
runat="server"〉
〈p〉版权所有〈/p〉
〈/asp:ContentPlaceHolder〉
〈/div〉
〈/form〉
〈/body〉
〈/html〉
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
ASP.NET网页模板的内容页代码
〈%@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〉这里是首页的内容〈/p〉
〈/asp:Content〉
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
效果
可以看到,导航栏的***项突出显示了。
更好的方法
ASP.masterpage1_master 是强制类型转换,这样使用起来似乎不是很方便,因为每次使用 Master 的地方都要重复地写这些代码,我们可以利用 MasterType 指令来实现。
〈%@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〉这里是首页的内容〈/p〉
〈/asp:Content〉
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
#p#
在上一页已经介绍过ASP.NET网页模板访问母版资源的两种方法,其中第二种方法使用简单快捷,但在某些情况下同样显得无能为力。
比如:一个页面需要三种布局风格,这可能就需要三个模板,由访问者决定使用哪一个模板,也就是说在页面开发的时候,还不知道将使用哪一个模板,使用 @ MasterType VirtualPath 也就无法确定 MasterPage 的类型。
我们可以这样做:
◆建立一个基类。
◆各个模板页派生自这个基类。
◆内容页通过 MasterPageFile 确定使用哪个模板,通过 @ MasterType TypeName 来使用基类类型处理这些模板的资源。
具体如下(只演示一个模板文件代码):
基类文件代码:
usingSystem;
usingSystem.Web.UI;
namespaceMasterPageNameSpace
{
publicabstractclassMasterPageClass:
MasterPage
{
publicabstractvoidSetCurNavItem
(intitemIndex);
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
注意使用的名称空间和类及方法的修饰限定符。
模板文件代码:
〈%@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="导航一"〉〈/asp:ListItem〉
〈asp:ListItemText="导航二"〉〈/asp:ListItem〉
〈/asp:BulletedList〉
〈/asp:ContentPlaceHolder〉
〈asp:ContentPlaceHolderID="m_content"runat="server"〉
在
〈/asp:ContentPlaceHolder〉
〈asp:ContentPlaceHolderID="m_footer"runat="server"〉
〈p〉版权所有〈/p〉
〈/asp:ContentPlaceHolder〉
〈/div〉
〈/form〉
〈/body〉
〈/html〉
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
我们也可以通过 CSC 把基类文件编译成 DLL 放在 bin 目录下,或者将 .cs 文件放在 App_Code 目录下,然后指令中省略 Src。
ASP.NET网页模板内容文件代码:
〈%@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〉这里是首页的内容〈/p〉
〈/asp:Content〉
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
总结
我们访问模板文件中的资源有三种方法:
◆程序中利用强制类型对 Master 进行转换;
◆利用 @ MasterType VirtualPath;
◆利用 @ MasterType TypeName。
【编辑推荐】