ASP.NET网页模板的母版资源访问

2012 年 12 月 13 日4600

本文介绍如何在ASP.NET网页模版中对内容页访问母版页的资源,还是举例说明,不同的页面在导航栏上应该有不同的指示,比如当前页面是 A 页面,导航栏的 A 应该突出显示。

母版资源页代码

    〈%@MasterLanguage="C#"%〉 〈!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML 1.0Transitional//EN""http://http://www.zjjv.com///TR/ xhtml1/DTD/xhtml1-transitional.dtd"〉 〈scriptrunat="server"〉 publicvoidSetCurNavItem(intitemIndex) { nav.Items[itemIndex].Attributes.CssStyle. Add("color","#FF0000"); } 〈/script〉 〈htmlxmlns="http://http://www.zjjv.com///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〉

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〉

效果

ASP.NET网页模板的母版资源访问

可以看到,导航栏的第一项突出显示了。

更好的方法

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〉

在上一页已经介绍过ASP.NET网页模板访问母版资源的两种方法,其中第二种方法使用简单快捷,但在某些情况下同样显得无能为力。

比如:一个页面需要三种布局风格,这可能就需要三个模板,由访问者决定使用哪一个模板,也就是说在页面开发的时候,还不知道将使用哪一个模板,使用 @ MasterType VirtualPath 也就无法确定 MasterPage 的类型。

我们可以这样做:

◆建立一个基类。

◆各个模板页派生自这个基类。

◆内容页通过 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://http://www.zjjv.com///TR/xhtml1/DTD/ xhtml1-transitional.dtd"〉 〈scriptrunat="server"〉 publicoverridevoidSetCurNavItem(intitemIndex) { nav.Items[itemIndex].Attributes.CssStyle.Add("color","#FF0000"); } 〈/script〉 〈htmlxmlns="http://http://www.zjjv.com///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〉

我们也可以通过 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〉

总结

我们访问模板文件中的资源有三种方法:

◆程序中利用强制类型对 Master 进行转换;

◆利用 @ MasterType VirtualPath;

◆利用 @ MasterType TypeName。

相关阅读:asp.net 实现购物车详细代码

Page language="c#" Codebehind="shoppingcart.aspx.cs" AutoEventWireup="false" Inherits="myshop.shoppingcart" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML><HEAD>

<title>shoppingcart

</title>

<meta http-equiv="Content-Type" content="text/html。

0 0