在ASP.NET 2.0中建立站点导航层次
站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局。默认的站点导航提供程序是基于XML的,但是你也可以通过编写自定义的提供程序,从任何后端位置暴露这些信息。
站点导航API--站点导航API用于在应用程序的代码中访问站点导航信息,它摘录了导航信息存储的细节。你可以使用API来编程访问应用程序的导航节点。
导航控件--导航控件为页面之间的导航提供了通用的UI,例如树视图、菜单和breadcrumb("面包屑",一种显示当前所在页面的控件)。这些控件利用ASP.NET 2.0中的站点导航服务来检索你给站点定义的结构。SiteMapDataSource控件还允许你把其它UI控件绑定到站点导航数据。
网站经常需要显示导航数据,来指导用户如何使用站点。ASP.NET中的导航特性允许开发者简单地定义导航数据,并根据这些信息来显示UI。
站点导航API是一种用于访问站点导航数据的基于提供程序(provider)的编程内容。该API把导航数据存储在XML文件中,并通过一组SiteMapNode类来暴露这些数据。应用程序和控件开发者可以构建SiteMapNode实例并使用这些信息来显示导航界面。
面向导航的服务器控件包括Menu、TreeView、SiteMapPath和SiteMapDataSource控件。这些控件都是建立在站点导航类的顶端的,它们使用和显示导航数据的时候都是不考虑数据存储的特定细节问题的。Menu和TreeView控件还可以使用XML文件的数据和XMLDataSource控件的数据。
Url映射特性允许开发者为不同URL请求的重映射(re-mapping)定义简单的规则。
使用站点导航控件
Menu、TreeView、SiteMapPath和SiteMapDataSource控件根据导航数据生成导航界面。导航数据可以存储在XML文件中,或者利用站点导航特性的基于提供程序的能力来保存。下面的例子演示了如何组合使用站点导航特性的不同控件。
建立应用程序站点地图
示例的导航结构存放在Web.sitemap文件中,在下面你可以看到站点地图文件。Web.sitemap文件包含一个顶层的<siteMap>元素。在<siteMap>元素内至少嵌套一个<siteMapNode>元素。在一个站点地图内必须有一个顶层的<siteMapNode>。站点导航特性需要一个根<siteMapNode>来确保沿着节点层次的访问最终汇聚到一个已知的节点。你可以在根<siteMapNode>元素下嵌套多个<siteMapNode>元素。此外,嵌套<siteMapNode>元素的深度是没有限制的。
一个<siteMapNode>元素通常包含Url(链接)、Title(标题)和Description(描述)属性。Url属性指明与应用程序中的页面对应的路径。它也可以包含其它应用程序中的页面的路径,或者指向完全不同的网站的多个URL。在下面的例子中,所有的Url属性都使用应用程序相对语法来引用路径。Title属性用于显示导航数据UI的文本内容。例如,SiteMapPath控件把Title属性作为控件的超链接文本显示。如果提供了Description属性,服务器控件就把显示为工具条提示或ALT文本。开发者也可以给<siteMapNode>添加自定义属性,利用SiteMapNode类的默认索引器(indexer)就可以检索这些属性了。你可以查阅.NET框架组件文档找到更多的关于<siteMapNode>元素其它一些属性的信息。
Web.sitemap的内容
<siteMap>
<siteMapNode title="Home" url="~/default.aspx" >
<siteMapNode title="Introduction to ASP.NET" url="~/introduction/default.aspx">
<siteMapNode title="What's New in Whidbey?" url="~/introduction/whatsnew.aspx"/>
<siteMapNode title="Sample Applications (Starter Kits)" url="~/introduction/starterkits.aspx"/>
<siteMapNode title="Introduction to Visual Web Developer" url="~/introduction/vwd.aspx"/>
</siteMapNode>
<siteMapNode title="Building A Web Application" url="~/development/default.aspx">
<siteMapNode title="Building a Simple Application" url="~/development/simple/default.aspx">
<siteMapNode title="Introduction to ASP.NET pages" url="~/development/simple/pages.aspx"/>
……
</siteMapNode>
</siteMapNode>
</siteMap>
使用站点导航控件
在Web页面上提供站点导航的最简单办法就是使用图形化的站点导航控件(SiteMapPath、TreeView和 Menu)。
· SiteMapPath--一个breadcrumb控件,它检索用户的当前页面并显示页面的层次结构。这让用户可以导航回层次中其它的页面。SiteMapPath只能与SiteMapProvider一起使用,需要设置控件的SiteMapProvider属性。
· TreeView--在Web页面上提供垂直的用户界面,它可以展开和收缩选中的节点,也可以提供检查框功能以供用户选择数据项。TreeView控件支持宣告式的或编程设置数据元素和数据源控件。如果你使用SiteMapDataSource控件,那么数据绑定就是自动进行的。
· Menu--提供水平的或垂直的用户界面,当用户把鼠标放在一项上的时候会弹出子菜单。Menu控件支持宣告式的或编程设置数据元素或数据源控件。如果你使用SiteMapDataSource控件,数据绑定就是自动进行的。
请注意,TreeView和Menu控件都可以用于非导航的情形。
下表描述了TreeView和Menu之间的差别,以便于你能根据需要做出适当的选择。
特性MenuTreeView
扩展弹出位置扩展
根据需要下载NoYes
检查框NoYes
模板YesNo
布局水平 & 垂直垂直
Style选项YesYes
选择模式静态的、 动态的层次层次或父/根/叶,或按数据项
在下面的例子中,你看到的TreeView和Menu控件为不同的区域和操作(例如NodeStyle和HoverNodeStyle)配置了一些样式属性。例子中的TreeView和Menu控件都连接到页面上的同一个SiteMapDataSource控件。SiteMapPath控件通过Web.config文件中设置的默认的SiteMapProvider来访问相同的数据。
<asp:treeview ID="TreeView1" ForeColor="White" DataSourceId="SiteMapDataSource1" NodeIndent="0" NodeStyle-ChildNodesPadding="10" runat="server">
<LevelStyles>
<asp:TreeNodeStyle Font-Bold="true"/>
<asp:TreeNodeStyle />
<asp:TreeNodeStyle Font-Size="x-small"/>
</LevelStyles>
<nodestyle forecolor="White" HorizontalPadding="5"/>
<SelectedNodeStyle backcolor="lightblue" forecolor="blue" />
<HoverNodeStyle Font-UnderLine="true" />
</asp:treeview>
<asp:sitemappath id="SiteMapPath1" runat="server" />
<asp:Menu ID="Menu1" DataSourceId="SiteMapDataSource1" runat="server">
<DynamicSelectedStyle BackColor="lightblue" ForeColor="Blue" />
<DynamicHoverStyle Font-Underline="true" />
<StaticHoverStyle Font-Underline="true" />
</asp:Menu>
<asp:sitemapdatasource id="SiteMapDataSource1" runat="server" />