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

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 76 ::
收藏到网摘: 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>