首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

16.5  SiteMap数据提供程序

在ASP.NET 2.0中,以DataSource控件的形式添加了一组全新的数据提供程序。本章前面介绍的其中一个新的DataSource控件是SiteMapDataSource,这个新的DataSource控件可处理站点地图和绑定到其上的控件。

一些控件不需要SiteMapDataSource控件来绑定到应用程序的站点地图上(站点地图一般存储在Web.sitemap文件中)。本章的前面介绍了使用SiteMapPath控件时不需要SiteMapDataSource控件。SiteMapPath控件可以直接处理Web.sitemap文件,不需要这个新的数据提供程序。

但一些导航控件如TreeView控件和DropDownList控件,就需要中间的SiteMapDataSource控件来提取站点导航信息。

SiteMapDataSource控件的使用很简单,如本章的例子所示。SiteMapDataSource控件的最简单形式如下所示:

<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />

SiteMapDataSource控件的这种形式只能获得树型结构的信息(如前面所示)。注意,有许多属性都可以改变数据在绑定到数据输出的控件中的显示方式。

16.5.1  ShowStartingNode属性

ShowStartingNode属性确定了.sitemap文件的根节点是否用所提取的节点对象集合来获得。这个属性带一个布尔值,默认设置为True。如果使用程序清单16-1中的Web.sitemap文件,就可以构建如程序清单16-25中所示的SiteMapdataSource控件,从集合中删除根节点。

程序清单16-25  从获得的节点集合中删除根节点

<%@ Page Language="VB" %>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Menu Server Control</title>

</head>

<body>

    <form id="form1" runat="server">

        <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server"

         ShowStartingNode="False" />

        <asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1">

        </asp:Menu>

    </form>

</body>

</html>

这段代码生成的菜单如图16-28所示。

图  16-28

在这个屏幕图中,根节点已被删除,所显示的菜单从根节点的子节点开始。

16.5.2  StartFromCurrentNode属性

StartFromCurrentNode属性会让SiteMapDataProvider只提取从页面的当前节点开始的节点集合。该属性默认设置为False,表示SiteMapDataProvider总是提取所有的节点(从根节点开始到当前节点)。

对于这个例子,使用程序清单16-1中的.sitemap文件创建一个页面Markets.aspx。这个页面在节点集合的层次结构中是Finance节点的一个子节点,它还有两个子节点U.S. Market Report和NYSE。把StartFromCurrentNode属性设置为True的示例如程序清单16-26所示。

程序清单16-26  使用StartFromCurrentNode属性的MarketsUS.aspx页面

<%@ Page Language="VB" %>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Menu Server Control</title>

</head>

<body>

    <form id="form1" runat="server">

        <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server"

         StartFromCurrentNode="True" />

        <asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1">

        </asp:Menu>

    </form>

</body>

</html>

添加这个属性后的结果如图16-29所示。

图  16-29

16.5.3  StartingNodeOffset属性

StartingNodeOffset属性带一个整数值,表示层次结构集合的起点。这个属性默认设置为0,表示通过SiteMapDataSource控件获取的节点集合从根节点开始。在程序清单16-1的例子中,集合是从Default.aspx上的Home页面开始的,在本章的许多例子中都使用该页面。

如果把这个属性的值设置为1,集合的起点就与默认的起点(Default.aspx上的Home页面)之间相隔1个空格。例如,如果使用SiteMapDataSource控件的页面是MarketsUS.aspx,则节点集合就从Finance页面(Finance.aspx)开始。

Home   偏移 0

   News  偏移1

      U.S.   偏移2

      World   偏移2

      Technology   偏移2

      Sports   偏移2

   Finance   偏移1

      Quotes   偏移2

      Markets   偏移2

         U.S. Market Report   偏移3

         NYSE   偏移3

      Funds   偏移2

   Weather   偏移1

在这个层次结构中,说明了每个节点与根节点的偏移量。因此,如果把StartingNodeOffset属性设置为1,且浏览到U.S. Market Report页面上,节点集合就从Finance页面(Finance.aspx)开始,根节点的其他子节点(News和Weather)就不会出现在节点集合中。

16.5.4  StartingNodeUrl属性

StartingNodeUrl属性可以指定在.sitemap文件中找到的页面,节点集合就从该页面开始。该属性的值默认为空,但设置为Finance.aspx时,集合就把Finance页面作为节点集合的根节点,从这个页面开始。程序清单16-27显示了使用StartingNodeUrl属性的一个例子。

程序清单16-27  使用StartingNodeUrl属性

<%@ Page Language="VB" %>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Menu Server Control</title>

</head>

<body>

    <form id="form1" runat="server">

        <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server"

         StartingNodeUrl="Finance.aspx" />

        <asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1">

        </asp:Menu>

    </form>

</body>

</html>

遇到StartingNodeUrl属性值时,就把其值与Web.sitemap文件中的url属性比较。如果它们匹配,就把匹配的页面用作SiteMapDataSource控件获得的节点集合中的根节点。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论