这一节介绍如何在内容页访问母版页的资源,还是举例说明,不同的页面在导航栏上应该有不同的指示,比如当前页面是 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>
内容页代码
<%@ Page Language="C#" MasterPageFile="MasterPage1.master" Title="首页" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
((ASP.masterpage1_master)Master).SetCurNavItem(0);
}
</script>
<asp:Content ID="content" runat="server" ContentPlaceHolderID="m_content">
<p>这里是首页的内容</p>
</asp:Content>
效果

可以看到,导航栏的第一项突出显示了。
更好的方法
ASP.masterpage1_master 是强制类型转换,这样使用起来似乎不是很方便,因为每次使用 Master 的地方都要重复地写这些代码,我们可以利用 MasterType 指令来实现。
<%@ Page Language="C#" MasterPageFile="MasterPage1.master" Title="首页" %>
<%@ MasterType VirtualPath="MasterPage1.master" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Master.SetCurNavItem(0);
}
</script>
<asp:Content ID="content" runat="server" ContentPlaceHolderID="m_content">
<p>这里是首页的内容</p>
</asp:Content>
更强的方法
将在下一节中介绍。