ASP.NET网页模板的母版资源访问
创始人
2024-04-21 07:01:44
0

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

母版资源页代码

  1. 〈%@ Master Language="C#" %〉  
  2. 〈!DOCTYPE html PUBLIC "-//W3C//DTD XHTML   
  3. 1.0 Transitional//EN" "http://www.w3.org/TR/  
  4. xhtml1/DTD/xhtml1-transitional.dtd"〉  
  5. 〈script runat="server"〉  
  6. public void SetCurNavItem(int itemIndex)  
  7. {  
  8. nav.Items[itemIndex].Attributes.CssStyle.  
  9. Add("color", "#FF0000");  
  10. }  
  11. 〈/script〉  
  12. 〈html xmlns="http://www.w3.org/1999/xhtml" 〉  
  13. 〈head runat="server"〉  
  14. 〈title〉Untitled Page〈/title〉  
  15. 〈/head〉  
  16. 〈body〉  
  17. 〈form id="form1" runat="server"〉  
  18. 〈div〉  
  19.  
  20. 〈asp:ContentPlaceHolder id="m_header"   
  21. runat="server"〉  
  22. 〈asp:BulletedList ID="nav" runat="server"〉  
  23. 〈asp:ListItem Text="导航一"〉〈/asp:ListItem〉  
  24. 〈asp:ListItem Text="导航二"〉〈/asp:ListItem〉  
  25. 〈/asp:BulletedList〉  
  26. 〈/asp:ContentPlaceHolder〉  
  27.  
  28. 〈asp:ContentPlaceHolder ID="m_content"   
  29. runat="server"〉在  
  30. 〈/asp:ContentPlaceHolder〉  
  31.  
  32. 〈asp:ContentPlaceHolder ID="m_footer"   
  33. runat="server"〉  
  34. 〈p〉版权所有〈/p〉  
  35. 〈/asp:ContentPlaceHolder〉  
  36. 〈/div〉  
  37. 〈/form〉  
  38. 〈/body〉  
  39. 〈/html〉  

ASP.NET网页模板的内容页代码

  1. 〈%@PageLanguage="C#"MasterPageFile="  
  2. MasterPage1.master"Title="首页"%〉  
  3. 〈scriptrunat="server"〉  
  4. protectedvoidPage_Load  
  5. (objectsender,EventArgse)  
  6. {  
  7. ((ASP.masterpage1_master)Master).  
  8. SetCurNavItem(0);  
  9. }  
  10. 〈/script〉  
  11. 〈asp:ContentID="content"runat="server" 
  12. ContentPlaceHolderID="m_content"〉  
  13. 〈p〉这里是首页的内容〈/p〉  
  14. 〈/asp:Content〉  

效果

效果

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

更好的方法

ASP.masterpage1_master 是强制类型转换,这样使用起来似乎不是很方便,因为每次使用 Master 的地方都要重复地写这些代码,我们可以利用 MasterType 指令来实现。

  1. 〈%@PageLanguage="C#"MasterPageFile="  
  2. MasterPage1.master"Title="首页"%〉  
  3. 〈%@MasterTypeVirtualPath="MasterPage1.master"%〉  
  4. 〈scriptrunat="server"〉  
  5. protectedvoidPage_Load(objectsender,EventArgse)  
  6. {  
  7. Master.SetCurNavItem(0);  
  8. }  
  9. 〈/script〉  
  10. 〈asp:ContentID="content"runat="  
  11. server"ContentPlaceHolderID="m_content"〉  
  12. 〈p〉这里是首页的内容〈/p〉  
  13. 〈/asp:Content〉  

#p#

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

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

我们可以这样做:

◆建立一个基类。

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

◆内容页通过 MasterPageFile 确定使用哪个模板,通过 @ MasterType TypeName 来使用基类类型处理这些模板的资源。


具体如下(只演示一个模板文件代码):

基类文件代码:

  1. usingSystem;  
  2. usingSystem.Web.UI;  
  3. namespaceMasterPageNameSpace  
  4. {  
  5. publicabstractclassMasterPageClass:  
  6. MasterPage  
  7. {  
  8. publicabstractvoidSetCurNavItem  
  9. (intitemIndex);  
  10. }  
  11. }  

注意使用的名称空间和类及方法的修饰限定符。

模板文件代码:

  1. 〈%@MasterLanguage="C#"Src="m1.cs" 
  2. Inherits="MasterPageNameSpace.MasterPageClass"%〉  
  3. 〈!DOCTYPEhtmlPUBLIC"-//W3C//  
  4. DTDXHTML1.0Transitional//EN"  
  5. "http://www.w3.org/TR/xhtml1/DTD/  
  6. xhtml1-transitional.dtd"〉  
  7. 〈scriptrunat="server"〉  
  8. publicoverridevoidSetCurNavItem(intitemIndex)  
  9. {  
  10. nav.Items[itemIndex].Attributes.CssStyle.Add 
  11. ("color","#FF0000");  
  12. }  
  13. 〈/script〉  
  14. 〈htmlxmlns="http://www.w3.org/1999/xhtml"〉  
  15. 〈headrunat="server"〉  
  16. 〈title〉UntitledPage〈/title〉  
  17. 〈/head〉  
  18. 〈body〉  
  19. 〈formid="form1"runat="server"〉  
  20. 〈div〉  
  21.  
  22. 〈asp:ContentPlaceHolderid="m_header" 
  23. runat="server"〉  
  24. 〈asp:BulletedListID="nav"runat="server"〉  
  25. 〈asp:ListItemText="导航一"〉〈/asp:ListItem〉  
  26. 〈asp:ListItemText="导航二"〉〈/asp:ListItem〉  
  27. 〈/asp:BulletedList〉  
  28. 〈/asp:ContentPlaceHolder〉  
  29.  
  30. 〈asp:ContentPlaceHolderID="m_content"runat="server"〉  
  31. 在  
  32. 〈/asp:ContentPlaceHolder〉  
  33.  
  34. 〈asp:ContentPlaceHolderID="m_footer"runat="server"〉  
  35. 〈p〉版权所有〈/p〉  
  36. 〈/asp:ContentPlaceHolder〉  
  37. 〈/div〉  
  38. 〈/form〉  
  39. 〈/body〉  
  40. 〈/html〉  

我们也可以通过 CSC 把基类文件编译成 DLL 放在 bin 目录下,或者将 .cs 文件放在 App_Code 目录下,然后指令中省略 Src。

ASP.NET网页模板内容文件代码:

  1. 〈%@PageLanguage="C#"MasterPageFile="  
  2. MasterPage1.master"Title="首页"%〉  
  3. 〈%@MasterTypeTypeName="  
  4. MasterPageNameSpace.MasterPageClass"%〉  
  5. 〈scriptrunat="server"〉  
  6. protectedvoidPage_Load(objectsender,EventArgse)  
  7. {  
  8. Master.SetCurNavItem(0);  
  9. }  
  10. 〈/script〉  
  11. 〈asp:ContentID="content"runat="  
  12. server"ContentPlaceHolderID="m_content"〉  
  13. 〈p〉这里是首页的内容〈/p〉  
  14. 〈/asp:Content〉  

总结

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

◆程序中利用强制类型对 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对像

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...