SiteMapDataSource 控件是站点地图数据的数据源,站点数据则由为站点配置的站点地图提供程序进行存储。SiteMapDataSource 使那些并非专门作为站点导航控件的 Web 服务器控件(如 TreeView、Menu 和 DropDownList 控件)能够绑定到分层的站点地图数据。可以使用这些 Web 服务器控件将站点地图显示一个为目录,或者对站点进行主动式导航。当然,您也可以使用 SiteMapPath 控件,该控件被专门设计为一个站点导航控件,因此不需要 SiteMapDataSource 控件的实例。
SiteMapDataSource 绑定到站点地图数据,并基于在站点地图层次结构中指定的起始节点显示其视图。默认情况下,起始节点是层次结构的根节点,但也可以是层次结构中的任何其他节点。起始节点由以下几个 SiteMapDataSource 属性的值来标识:
| 起始节点 | 属性值 |
| 层次结构的根节点(默认设置)。 | StartFromCurrentNode 为 false。 未设置 StartingNodeUrl。 |
| 表示当前正在查看的页的节点。 | StartFromCurrentNode 为 true。 未设置 StartingNodeUrl。 |
| 层次结构的特定节点。 | StartFromCurrentNode 为 false。 已设置 StartingNodeUrl。 |
如果 StartingNodeOffset 属性设置为非 0 的值,则它会影响起始节点以及由 SiteMapDataSource 控件基于该节点公开的站点地图数据层次结构。StartingNodeOffset 的值为一个负整数或正整数,该值标识从 StartFromCurrentNode 和 StartingNodeUrl 属性所标识的起始节点沿站点地图层次结构上移或下移的层级数,以便对数据源控件公开的子树的起始节点进行偏移。
如果 StartingNodeOffset 属性设置为负数 -n,则由该数据源控件公开的子树的起始节点是所标识的起始节点上方 n 个级别的上级节点。如果 n 的值大于层次结构树中所标识起始节点上方的所有上级层级数,则子树的起始节点是站点地图层次结构的根节点。
如果 StartingNodeOffset 属性设置为正数 +n,则公开的子树的起始节点是位于所标识的起始节点下方 n 个级别的子节点。由于层次结构中可能存在多个子节点的分支,因此,如果可能,SiteMapDataSource 会尝试根据所标识起始节点与表示当前被请求页的节点之间的路径,直接解析子节点。如果表示当前被请求页的节点不在所标识起始节点的子树中,则忽略 StartingNodeOffset 属性的值。如果表示当前被请求页的节点与位于其上方的所标识起始节点之间的层级差距小于 n 个级别,则使用当前被请求页作为起始节点。
站点地图数据是从 SiteMapProvider 对象(如作为 ASP.NET 的默认站点地图提供程序的 XmlSiteMapProvider)中检索的。可指定为站点配置的任何提供程序向 SiteMapDataSource 提供站点地图数据,并且通过访问 SiteMap.Providers 集合可获得可用提供程序的列表。
与所有数据源控件一样,SiteMapDataSource 的每个实例都与单个帮助器对象关联,该帮助器对象称为数据源视图。SiteMapDataSourceView 是一个基于站点地图数据的视图,根据数据源的属性进行设置,并且通过调用 GetHierarchicalView 方法来检索此视图。SiteMapDataSourceView 维护控件所绑定到的 SiteMapNodeCollection 对象。
默认情况下,起始节点是层次结构的根节点,但是您可将起始节点设置为任何节点。起始节点可以是相对于站点地图中当前位置的一个节点,或者是相对于某个绝对位置的节点。通过设置 StartingNodeUrl 属性可指定起始节点。
SiteMapDataSource 专用于导航数据,并且不支持排序、筛选、分页或缓存之类的常规数据源操作,也不支持更新、插入或删除之类的数据记录操作。