SiteMapPath 控件包含来自站点地图的导航数据。此数据包括有关网站中的页的信息,如 URL、标题、说明和导航层次结构中的位置。若将导航数据存储在一个地方,则可以更方便地在网站的导航菜单中添加和删除项。
SiteMapPath 控件包含来自站点地图的导航数据。此数据包括有关网站中的页的信息,如 URL、标题、说明和导航层次结构中的位置。若将导航数据存储在一个地方,则可以更方便地在网站的导航菜单中添加和删除项。
下面的代码示例演示包含在 Web.sitemap 文件中的站点地图数据。
<siteMap> <siteMapNode title="Home" description="Home" url="~/default.aspx" > <siteMapNode title="Services" description="Services we offer" url="~/Services.aspx"> <siteMapNode title="Training" description="Training classes" url="~/Training.aspx" /> <siteMapNode title="Consulting" description="Consulting services" url="~/Consulting.aspx" /> </siteMapNode> </siteMapNode> </siteMap> |
说明: 只有在站点地图中列出的页才能在 SiteMapPath 控件中显示导航数据。如果将 SiteMapPath 控件放置在站点地图中未列出的页上,该控件将不会向客户端显示任何信息。
通过添加下面的代码,可以向 Training.aspx 页添加 SiteMapPath 控件。
<asp:SiteMapPath ID="SiteMapPath1" Runat="server"></asp:SiteMapPath> |
当在浏览器中查看 Training.aspx 页时,SiteMapPath 控件将显示如下类似信息,并以超链接的形式呈现“主页”和“服务”:
主页 > 服务 > 培训
使用 SiteMapPath 控件无需代码和绑定数据就能创建站点导航。此控件可自动读取和呈现站点地图信息。但如果需要,您也可以使用 SiteMapPath 控件来更改站点地图数据。有关更多信息,请参见如何:以编程方式修改内存中的站点地图节点。
SiteMapPath 控件使用户能够向后导航 -- 从当前页到站点层次结构中更高层的页。但是,SiteMapPath 控件不让用户向前导航 -- 从当前页到站点层次结构中较低层的页。例如,可以在新闻组或者留言板应用程序中使用 SiteMapPath 控件,使用户能查看当前浏览的文章的路径。
一、SiteMapPath 类
SiteMapPath 控件是一种站点导航控件,反映 SiteMap 对象提供的数据。它提供了一种用于轻松定位站点的节省空间方式,用作当前显示页在站点中位置的引用点。此种类型的控件通常称为面包屑或眉毛,因为它显示了超链接页名称的分层路径,从而提供了从当前位置沿页层次结构向上的跳转。SiteMapDataSource。SiteMapPath 对于分层页结构较深的站点很有用,在此类站点中 TreeView 或 Menu 可能需要较多的页空间。
SiteMapPath 控件直接使用网站的站点地图数据。如果将其用在未在站点地图中表示的页面上,则其不会显示。有关站点地图的更多信息,请参见 ASP.NET 站点导航概述。
SiteMapPath 由节点组成。路径中的每个元素均称为节点,用 SiteMapNodeItem 对象表示。锚定路径并表示分层树的根的节点称为根节点。表示当前显示页的节点称为当前节点。当前节点与根节点之间的任何其他节点都为父节点。下表描述了三种不同的节点类型。
节点类型
|
说明
|
根节点
|
锚定节点分层组的节点。
|
父节点
|
有一个或多个子节点但不是当前节点的节点。
|
当前节点
|
表示当前显示页的节点。
|
SiteMapPath 显示的每个节点都是 HyperLink 或 Literal 控件,您可以将模板或样式应用到这两种控件。对节点应用模板和样式需遵循两个优先级规则:
·如果为节点定义了模板,它会重写为节点定义的样式。
·特定于节点类型的模板和样式会重写为所有节点定义的常规模板和样式。
NodeStyle 和 NodeTemplate 属性适用于所有节点,而不考虑节点类型。如果同时定义了这两个属性,将优先使用 NodeTemplate。
CurrentNodeTemplate 和 CurrentNodeStyle 属性适用于表示当前显示页的节点。如果除了 CurrentNodeTemplate 外,还定义了 NodeTemplate,则将忽略它。如果除了 CurrentNodeStyle 外,还定义了 NodeStyle,则它将与 CurrentNodeStyle 合并,从而创建合并样式。此合并样式使用 CurrentNodeStyle 的所有元素,以及 NodeStyle 中不与 CurrentNodeStyle 冲突的任何附加元素。
RootNodeTemplate 和 RootNodeStyle 属性适用于表示站点导航层次结构根的节点。如果除了 RootNodeTemplate 外,还定义了 NodeTemplate,则将忽略它。如果除了 RootNodeStyle 外,还定义了 NodeStyle,则它将与 RootNodeStyle 合并,从而创建合并样式。此合并样式使用 RootNodeStyle 的所有元素,以及 NodeStyle 中不与 CurrentNodeStyle 冲突的任何附加元素。最后,如果当前显示页是该站点的根页,将使用 RootNodeTemplate 和 RootNodeStyle,而不是 CurrentNodeTemplate 或 CurrentNodeStyle。
SiteMapPath 控件将由 SiteMapProvider 属性标识的站点地图提供程序用作站点导航信息的数据源。如果未指定提供程序,它将使用站点的默认提供程序,此提供程序由 SiteMap..::.Provider 属性标识。通常,这是 ASP.NET 默认站点地图提供程序(即 XmlSiteMapProvider)的一个实例。如果在站点内使用了 SiteMapPath 控件,但未配置站点地图提供程序,该控件将引发 HttpException 异常。
SiteMapPath 控件还提供多个您可以对其进行编程的事件。这使您可以在每次发生事件时都运行一个自定义例程。下表列出了 SiteMapPath 控件支持的事件。
节点类型
|
说明
|
根节点
|
锚定节点分层组的节点。
|
父节点
|
有一个或多个子节点但不是当前节点的节点。
|
当前节点
|
表示当前显示页的节点。
|
派生自 SiteMapPath 的类会重写 InitializeItem 方法,以自定义导航控件包含的 SiteMapNodeItem 控件。为了完全控制 SiteMapNodeItem 对象的创建方式以及将其添加到 SiteMapPath 的方式,派生类会重写 CreateControlHierarchy 方法。