当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 在ASP.NET 2.0中建立站点导航层次(2)

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

在ASP.NET 2.0中建立站点导航层次(2)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 75 ::
收藏到网摘: n/a

  在下面的例子中,你看到的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" />

  使用站点导航API

  站点导航API是使用可配置的提供程序访问导航数据的编程抽象内容。站点导航提供程序把导航数据的存储细节信息与API的其它部分隔离开来。站点导航API通过SiteMap和SiteMapNode类来暴露导航数据。SiteMap类返回与当前页面对应的SiteMapNode实例。它还可以访问那些为站点导航特性配置的提供程序。SiteMapProvider为执行下面一些事务提供了丰富的API:

  · 依据当前的HttpContext或任意URL检索SiteMapNode实例。

  · 检索SiteMapNode的父或子节点。

  · 访问当前页面的SiteMapNode,以及整个导航层次中的根SiteMapNode。

  · 执行授权规则,这样就保证了提供程序只返回用户可以看见的节点。

  SiteMapNode实例暴露的基本导航信息和功能包括:

  · URL、Title和description属性,以及开发者给SiteMapNode添加的自定义属性。

  · 获取某个节点的父和子节点。

  · 在某个节点的前后节点之间进行导航。

  · 获取SiteMapProvider实例的指针,它返回一个节点。

  ASP.NET发布的时候带有XmlSiteMapProvider提供程序。该提供程序使用XML文件(web.sitemap)中的数据,并根据数据返回SiteMapNode实例。XmlSiteMapProvider有下面一些功能:

  · 多个站点地图(sitemap)文件可以链接在一起来构建一个"虚拟的"导航数据集合。

  · 多个XmlSiteMapProvider实例可以链接到一起来构建一个"虚拟的"导航数据集合。

  · 提供程序可以根据站点当前的文件授权和URL授权规则来返回过虑后的节点。

  有了SiteMapProvider指针之后,你就可以根据URL来检索特定节点的站点导航数据。它会让你获取站点导航数据中的SiteMapNode实例指针。可以检索任意SiteMapNode实例的能力和从任何SiteMapNode开始进行站点导航的能力组合在一起,使你能够轻易地遍历站点的导航数据。

  作为一名开发者,你也可以把导航数据用其它的格式进行存储(例如作为关系数据存储在数据库中)。接着你应该构建一个衍生自SiteMapProvider的自定义提供程序。

  使用站点导航类编程

  你可以在代码中编程获取导航数据。编程获取站点导航数据的出发点是SiteMap类。在这个类中有大量的静态方法,其中最重要的一个是CurrentNode属性。在网站的任何页面中,你都可以调用SiteMap.CurrentNode来引用与当前的执行页面相匹配的导航数据片断。导航数据是用SiteMapNode实例的形式返回的--当你调用SiteMap.CurrentNode的时候,该属性返回与当前页面对应的SiteMapNode实例。站点导航特性根据存储在XML文件中的导航数据返回正确的节点。

  下面的例子演示了一个带有简单的分页功能的用户控件。在显示的页面中,用户控件位于页面的底部中间。最初该链接的内容是"下一个主题"。当你点击这个链接的时候,用户控件调用SiteMapNode对象来检测当前页面的附近是否存在页面。代码检测SiteMap.CurrentNode属性,看它的前面是否有页面(SiteMap.CurrentNode.PreviousSibling)、它的后面是否有页面(SiteMap.CurrentNode.NextSibling)。如果存在页面,用户控件就显示超链接,并把超链接的NavigateUrl属性设置为附近节点的Url属性。

  如果你点击页面左部的Treeview链接,可以看到用户控件是如何自动地显示适当的"前一个主题"和"后一个主题"链接的。用户控件还显示了另外一个超链接,你可以点击它返回主页。如果你查看这个超链接如何工作就会发现,该控件利用了主页元素中的自定义属性"customAttribute"。该控件演示了如何使用SiteMapNode的默认索引器来检索自定义属性的值。

  以下是引用片段:
<script language="VB" runat="server">  
Sub Page_Load()  
If (Not SiteMap.CurrentNode.NextSibling Is Nothing) Then  
NextTopic.NavigateUrl = SiteMap.CurrentNode.NextSibling.Url  
Else  
NextTopic.Visible = false  
Separator.Visible = false  
End If  

If (Not SiteMap.CurrentNode.PreviousSibling Is Nothing)  
PrevTopic.NavigateUrl = SiteMap.CurrentNode.PreviousSibling.Url  
Else  
PrevTopic.Visible = false  
Separator.Visible = false  
End If  

'使用FindSiteMapNode查找URL中的节点并提取一些信息  
Dim rootNode as SiteMapNode = SiteMap.Provider.FindSiteMapNode("~/Home.aspx")  
GoHome.NavigateUrl = rootNode.Url  
GoHome.ToolTip = rootNode.Description  
GoHome.Text = rootNode("customAttribute")  
End Sub  
</script>