方法 : 複数のサイト マップとサイトマップ プロバイダを設定する
更新 : 2007 年 11 月
ASP.NET サイトのナビゲーションは、既定では、Web サイトの階層構造を表す Web.sitemap という名前の XML ファイルと連携します。それ以外に、Web サイト全体のナビゲーション構造を表す複数のサイトマップ ファイルやサイトマップ プロバイダを使用することもできます。
たとえば、子サイト マップを参照するメイン サイト マップを使用できます。メイン サイト マップは次のようになります。
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="https://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="https://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>
この 2 つのサイト マップから表示されるメニューは、次のようになります。
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 クラスを使用する場合は、Web.sitemap ファイルの適切な場所に次の SiteMapNode を追加します。
<siteMapNode siteMapFile="MySiteMap.sitemap" />
siteMapFile 属性には、次のいずれかの形式を使用できます。
アプリケーション相対参照 (~/MySiteMap.sitemap など)。
仮想パス (/Customers/MySiteMap.sitemap など)。
現在のサイトマップ ファイルの場所を基準にした相対パス参照 (Guests/MySiteMap.sitemap など)。
メモ : siteMapFile 属性を指定するときに、siteMapNode 要素の Url、title、または description の各属性を指定しないでください。
サイトマップ ファイルの作成方法の詳細については、「ASP.NET サイト マップ」を参照してください。
親サイト マップからカスタム サイトマップ プロバイダにリンクするには
親サイト マップから、ナビゲーション構造内の子サイト マップの表示場所に SiteMapNode を作成します。
たとえば、既定の XmlSiteMapProvider クラスを使用する場合は、Web.sitemap ファイルを開き、階層構造内の適切な場所に次の SiteMapNode を追加します。
<siteMapNode provider="SimpleTextSiteMapProvider" />
メモ : provider 属性は、Web.config ファイル内のプロバイダの name 属性に対応します。
カスタム サイトマップ プロバイダを Web.config ファイルに追加するには、add 要素を使用します。
次のコードは、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 サイトのエリアごとに異なるナビゲーション構造が必要な場合に便利です。
Web.config ファイルで複数のサイト マップを設定するには
Web.config ファイルで、siteMap セクションを探し、各サイト マップの add 要素を作成します。
2 つのサイト マップを追加する方法を次の例に示します。
<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>
この構成では、~/Company1/Company1.sitemap ファイルと ~/Company2/Company2.sitemap ファイルをナビゲーション API のメンバやナビゲーション コントロール (SiteMapPath、TreeView、Menu など) で使用できます。そのためには、関連する SiteMapProvider プロパティを Company1SiteMap または Company2SiteMap に設定します。
ナビゲーション コントロールを Web ページに追加する方法の詳細については、「方法 : 簡単なサイト ナビゲーションを追加する」を参照してください。