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

开发 后端
本文向您介绍ASP.NET网页模板的母版资源访问,包括如何在内容页访问母版页的资源,通过举例说明,不同的页面在导航栏上应该有不同的指示。

本文介绍如何在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。

【编辑推荐】

  1. ASP.NET跨页提交功能详解(1)
  2. 在ASP.NET中向数据库批量插入数据
  3. ASP.NET用Post方式向网页发送数据
  4. ASP.NET 2.0部署WEB应用程序浅析
  5. ASP.NET中的HttpWorkerRequest对像
责任编辑:冰荷 来源: cftea
相关推荐

2009-12-14 17:50:45

ASP.NET 2.0

2009-07-27 16:11:01

ASP.NET网页模板

2009-07-24 16:37:04

创建母版页asp.net 2.0

2012-05-04 15:54:16

ASP.NET

2009-07-20 17:12:17

ASP.NET访问数据

2009-07-27 14:24:16

ASP.NET访问权限

2009-08-07 15:24:16

ASP.NET模板控件

2009-07-31 10:34:41

ASP.NET抓取网页

2009-08-05 14:27:55

ASP.NET模板基本

2009-07-27 15:19:54

2009-07-27 16:37:42

ASP.NET主机

2009-07-29 16:15:03

asp.net在线学习

2009-08-19 10:54:42

ASP.NET数据访问

2009-08-04 10:17:55

ASP.NET SqlASP.NET数据访问

2009-10-09 10:52:43

ASP.NET模板引擎

2009-07-28 17:17:19

ASP.NET概述

2009-08-03 14:22:33

什么是ASP.NET

2009-07-22 17:45:35

ASP.NET教程

2009-07-27 10:35:33

TypeConvertASP.NET

2009-07-29 16:33:28

GreeterLogiASP.NET
点赞
收藏

51CTO技术栈公众号