【IT168 学院频道】虽然基于PWS的Web站点功能简单,但是该应用程序却涉及多种ASP.NET 2.0新技术特性的应用。尤为关键的是,它还为利用ASP.NET 2.0技术创建两层Web应用程序提供了典型范本。在下面的几篇文章中将针对各种技术要点、实现方法展开分析。本文重点介绍母版页的应用方法。
1. 母版页应用
母版页是ASP.NET 2.0的新增功能,其主要用于替代过去的用户控件以实现页面模板功能,同时,母版页还提供了多种特性,可实现很多用户控件难以完成的功能,例如,母版页与内容页之间的交互等。母版页在基于PWS的Web站点应用程序中应用广泛,它为提高页面开发效率,降低页面维护强度奠定了坚实基础。本文将介绍母版页在该应用程序中的应用方法。
在解决方案资源管理器中,包括一个母版页文件Default.master。与*.aspx文件相同,Default.master文件同时还关联一个代码隐藏页文件Default.master.cs。然而,由于该母版页仅处理页面呈现,而与其他业务逻辑无关,因此,读者将会发现代码隐藏页文件仅包括其实际代码框架,并不包含任何业务逻辑等实际源代码实现。
首先,在Visual Studio 2005中打开Default.master文件,并切换至设计视图。如图1列举了设计视图。
![]() |
| 图1(点击看大图) |
如图1所示,母版页Default.master中主要包括了页首和页尾等页面公共部分内容,其中涉及多个服务器控件,例如,Menu、SiteMapPath、SiteMapDataSource和LoginStatus等。同时,在页面中部使用一个ContentPlaceHolder控件为内容页实现占位。当请求相关内容页时,.NET执行引擎将为用户发送母版页和内容页合并生成的结果页。这样,用户可阅览具有多个相同页首和页尾结果页。对于开发人员而言,如果修改了母版页内容,例如,将文字"此处是您的姓名"修改为其他文字,那么用户看到的所有结果页都将发生相应变化。
在Default.master页面底部,可以看到一个SiteMapDataSource控件。通过该控件可自动获取应用程序根目录下web.sitemap的数据。web.sitemap是站点地图文件,其以标准XML格式存储着Web站点结构数据,具体源代码如下所示。
| <?xml version="1.0" encoding="utf-8"?> <siteMap> <siteMapNode title="主页" url="Default.aspx"> <siteMapNode title="简历" url="Resume.aspx"/> <siteMapNode title="链接" url="Links.aspx"/> <siteMapNode title="相册" url="Albums.aspx"> <siteMapNode title="照片" url="Photos.aspx"> <siteMapNode title="详细信息" url="Details.aspx"/> </siteMapNode> </siteMapNode> <siteMapNode title="注册" url="Register.aspx"/> <siteMapNode title="管理" url="Admin/Albums.aspx"> <siteMapNode title="照片" url="Admin/Photos.aspx"> <siteMapNode title="详细信息" url="Admin/Details.aspx"/> </siteMapNode> </siteMapNode> </siteMapNode> </siteMap> |
![]() |
| 图2 |
图2所示的结构层次非常清晰,在此不再多做说明。需要说明的一点是:如果开发人员对Web站点进行修改,例如,修改页面文件名称、增加/删除文件,那么必须在web.sitemap文件中得到体现。同时,在修改过程中一定要牢记:节点的url属性值在整个web.sitemap文件中必须是唯一的。
理解如图2所示的站点文件结构对于准确有效的显示这些数据有着重要意义。在母版页中,共有4个服务器控件与web.sitemap文件相关,它们是SiteMapDataSource、Menu(2个)和SiteMapPath。下面列举了这些控件在母版页中的源代码。
| <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" StartingNodeOffset="0" /> <asp:SiteMapPath ID="SiteMapPath1" runat="Server" PathSeparator=" > " RenderCurrentNodeAsLink="true" /> <asp:Menu ID="menua" runat="server" DataSourceID="SiteMapDataSource1" CssClass="menua" Orientation="Horizontal" MaximumDynamicDisplayLevels="0" SkipLinkText="" StaticDisplayLevels="2" /> <asp:Menu ID="menub" runat="server" DataSourceID="SiteMapDataSource1" CssClass="menub" Orientation="Horizontal" MaximumDynamicDisplayLevels="0" SkipLinkText="" StaticDisplayLevels="2" /> |