在ASP.NET2.0中建立站点导航层次(2)

来源:互联网 发布:林书豪2015数据 编辑:程序博客网 时间:2024/05/16 19:37
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
.Nra800{display:none;}

在下面的例子中,你看到的TreeView和Menu控件为不同的区域和操作(例如NodeStyle和HoverNodeStyle)配置了一些样式属性。例子中的TreeView和Menu控件都连接到页面上的同一个SiteMapDataSource控件。SiteMapPath控件通过Web.config文件中设置的默认的SiteMapProvider来访问相同的数据。

以下是引用片段:
ASP:treeviewID="TreeView1"ForeColor="White"DataSourceId="SiteMapDataSource1"NodeIndent="0"NodeStyle-ChildNodesPadding="10"runat="server">  
<LevelStyles>  
ASP:TreeNodeStyleFont-Bold="true"/>  
ASP:TreeNodeStyle/>  
ASP:TreeNodeStyleFont-Size="x-small"/>  
</LevelStyles>  
<nodestyleforecolor="White"HorizontalPadding="5"/>  
<SelectedNodeStylebackcolor="lightblue"forecolor="blue"/>  
<HoverNodeStyleFont-UnderLine="true"/>  
</ASP:treeview>  
ASP:sitemappathid="SiteMapPath1"runat="server"/>  
ASP:MenuID="Menu1"DataSourceId="SiteMapDataSource1"runat="server">  
<DynamicSelectedStyleBackColor="lightblue"ForeColor="Blue"/>  
<DynamicHoverStyleFont-Underline="true"/>  
<StaticHoverStyleFont-Underline="true"/>  
</ASP:Menu>  
ASP:sitemapdatasourceid="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 type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击