Kobarin's Development Blog

C#やASP.NET、公開APIなどについての記録です。

標準のWeb.sitemap以外のSiteMapファイルを読み込む

目的

Web.sitemapでは、最上層のノードを1つしか指定できない。
通常はHOMEとなるページがあるのでこうした仕様でも問題ないが、
アプリケーション毎にディレクトリを作ってコンテンツを分けている場合などは、これでは都合が悪いと言う事がある。


そこで、Web.sitemapを複数作って、別々に読み込ませる方法を実践してみた。

コード

下の例では、自動車コンテンツのサイトマップを表す/car/Web.sitemapと、
住宅コンテンツを表す/home/Web.sitemapを、SiteMapProviderとして登録している。
それぞれのWeb.sitemapは、標準のWeb.sitemapと全く同じ形式でよい。

<?xml version="1.0"?>
<configuration>
  <system.web>
    <siteMap enabled="true">
      <providers>
        <add name="carSiteMapProvider" type="System.Web.XmlSiteMapProvider" siteMapFile="~/car/Web.sitemap" />
        <add name="homeSiteMapProvider" type="System.Web.XmlSiteMapProvider" siteMapFile="~/home/Web.sitemap" />
      </providers>
    </siteMap>
  </system.web>
</configuration>

次に、それぞれのWeb.sitemapを読み込むSiteMapPath側の指定は、

<asp:SiteMapPath ID="SiteMapPath1" runat="server" SiteMapProvider="carSiteMapProvider" />

といった形で行う。