在下面的例子中,你看到的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>
新闻热点
疑难解答
图片精选