默认情况下,ASP.NET 网站导航使用一个名为 Web.sitemap 的 XML 文件,该文件描述网站的层次结构。 但是,您可能要使用多个站点地图文件或站点地图提供程序来描述整个网站的导航结构。
例如,您可以具有引用子站点地图的主站点地图。 主站点地图可以是:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode title="Home Page" description="">
<siteMapNode title="First Level 1" description="" />
<siteMapNode title="First Level 2" description="">
<siteMapNode title="Second Level 1" description=""/>
<siteMapNode title="Second Level 2" description=""/>
</siteMapNode>
<siteMapNode siteMapFile="child.sitemap" />
</siteMapNode>
</siteMap>
子站点地图可以是:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode title="Child First Level 1" description="">
<siteMapNode title="Child Second Level 1" description="" />
<siteMapNode title="Child Second Level 2" description="" />
<siteMapNode title="" description="" />
</siteMapNode>
</siteMap>
从两个站点地图生成的菜单将显示如下:
Home Page
First Level 1
First Level 2
Second Level 1
Second Level 2
Child First Level 1
Child Second Level 1
Child Second Level 2
若要为一个网站配置多个站点地图,请从应用程序根目录下的站点地图开始。 在 Web.config 文件中将根提供程序配置为默认的站点地图提供程序。 然后,通过在 SiteMapNode对象中引用子站点地图或提供程序来链接到它们。
从父站点地图链接到子站点地图文件
-
在父站点地图的导航结构中,在要显示子站点地图的位置创建一个 SiteMapNode。
例如,如果使用的是默认的 XmlSiteMapProvider 类,则将下面的 SiteMapNode 添加到 Web.sitemap 文件中的相应位置。
<siteMapNode siteMapFile="MySiteMap.sitemap" />
siteMapFile 特性可以采取下面的某一种形式:
- 一个与应用程序相关的引用,如 ~/MySiteMap.sitemap。
- 一个虚拟路径,如 /Customers/MySiteMap.sitemap。
- 一个相对于当前站点地图文件位置的路径引用,如 Guests/MySiteMap.sitemap。
- 一个与应用程序相关的引用,如 ~/MySiteMap.sitemap。
注意 |
当指定 siteMapFile 特性时,不要为 siteMapNode 元素提供 Url、title 或 description 特性。 |
有关如何创建站点地图文件的更多信息,请参见 ASP.NET 站点地图。
从父站点地图链接到自定义站点地图提供程序
-
在父站点地图的导航结构中,在要显示子站点地图的位置创建一个 SiteMapNode。
例如,如果使用的是默认的 XmlSiteMapProvider 类,则打开 Web.sitemap 文件并将下面的 SiteMapNode 添加到层次结构中的相应位置:
<siteMapNode provider="SimpleTextSiteMapProvider" />
注意 |
provider 特性与 Web.config 文件中的提供程序的 name 特性相对应。 |
-
使用 add 元素将自定义站点地图提供程序添加到 Web.config 文件中。
下面的代码添加名为 SimpleTextSiteMapProvider 的自定义提供程序,但将 XmlSiteMapProvider 保留为默认的站点地图提供程序。
<configuration>
<!-- other configuration sections -->
<system.web>
<!-- other configuration sections -->
<siteMap defaultProvider="XmlSiteMapProvider">
<providers>
<add
name="SimpleTextSiteMapProvider"
type="Samples.AspNet.SimpleTextSiteMapProvider,Samples.AspNet"
siteMapFile = "siteMap.txt" />
</providers>
</siteMap>
</system.web>
</configuration>
有关创建自定义站点地图提供程序的更多信息,请参见实现 ASP.NET 站点地图提供程序。
如先前示例所示,将站点地图链接在一起可以从许多块地图生成一个站点地图结构。 或者,您还可以在 Web.config 文件中添加对不同站点地图的引用,使它们看起来像是不同的提供程序。 在网站的不同区域需要不同的导航结构时,这将十分有用。
在 Web.config 文件中配置多个站点地图
-
在 Web.config 文件中,找到 siteMap 节,并为每个站点地图都创建一个 add 元素。
下面的示例演示如何添加两个站点地图。
<configuration>
<!-- other configuration sections -->
<system.web>
<!-- other configuration sections -->
<siteMap defaultProvider="XmlSiteMapProvider">
<providers>
<add
name="Company1SiteMap"
type="System.Web.XmlSiteMapProvider"
siteMapFile="~/Company1/Company1.sitemap" />
<add
name="Company2SiteMap"
type="System.Web.XmlSiteMapProvider"
siteMapFile="~/Company2/Company2.sitemap" />
</providers>
</siteMap>
</system.web>
</configuration>
通过此配置,您可以与导航 API 成员和导航控件(如 SiteMapPath、TreeView 和 Menu)一起使用 ~/Company1/Company1.sitemap 和~/Company2/Company2.sitemap 文件。 为此,需要将相关 SiteMapProvider 属性设置为 Company1SiteMap 或 Company2SiteMap。