方法 : SiteMapDataSource Web サーバー コントロールによって取得されたノードをフィルタ処理する

更新 : 2007 年 11 月

SiteMapDataSource コントロールは、ASP.NET の既定のサイト マップ プロバイダである XmlSiteMapProvider などのサイト マップ プロバイダからサイト マップ データを取得します。SiteMapDataSource コントロールは、サイト マップ ノードのコレクション全体またはサブセットを取得するように設定できます。これは、1 つのページに複数のナビゲーション構造を表示し、ナビゲーション構造ごとにサイト マップの別個のセクションを表示するときに役立ちます。また、サイト内の個別のマスタ ページにサイト ナビゲーション要素を配布するときにも有効です。この場合、各マスタ ページには、サイト マップ全体の別々の部分が表示されます。

このサイト ナビゲーション コントロールを使用するには、サイトの構造を Web.sitemap ファイルに記述し、サイト マップにリストされる .aspx ファイルを作成する必要があります。

Web.sitemap ファイルを作成するには

  1. Web サイトのルート ディレクトリに新しいファイルを作成し、Web.sitemap というファイル名を付けます。このファイルに次の必須コードを配置します。

    <?xml version="1.0" encoding="utf-8" ?>
    <siteMap>
    </siteMap>
    
  2. ルート siteMapNode 要素を siteMap 要素の子として作成し、次の属性を定義します。

    • title   サイト マップ ノードにタイトルを割り当てます。タイトルは、Web ページのリンク テキストとして表示されます。

    • url   Web ページの URL を割り当てます。絶対 URL、または ~/Default.aspx. などの相対 URL を使用できます。このティルダ文字 (~) は、アプリケーションのルートを表します。この手順では後ほど、サイト マップにリストされた各 URL に対応する Web ページを作成します。リストに含まれる URL が存在しなかったり、重複していたりすると、アプリケーションが失敗します。この属性は空白にしておくこともできますが、この例では、編集が可能な .aspx ファイルを設定します。

    ms178423.alert_note(ja-jp,VS.90).gifメモ :

    サイト マップにはルート siteMapNode 要素を 1 つしか設定できませんが、このルートには、任意の数の子 siteMapNode 要素を含めることができます。

  3. siteMapNode 要素をルート siteMapNode 要素の子として作成します。前の手順と同じ属性を設定します。

  4. siteMapNode 要素を前の siteMapNode 要素の子として作成します。前の手順と同じ属性を設定します。この例では、サイト マップに 3 つのレベルの siteMapNode 要素を設定する必要があります。

    作成する Web.sitemap ファイルの例を次に示します。

    <?xml version="1.0" encoding="utf-8" ?>
    <siteMap>
      <siteMapNode title="Home" url="~/Default.aspx" roles="*">
        <siteMapNode title="Services" url="~/Services.aspx " >
          <siteMapNode title="Training" url="~/Training.aspx" />
        </siteMapNode>
        <siteMapNode title="Products" url="" />
      </siteMapNode>
    </siteMap>
    
  5. Web.sitemap ファイルを保存して閉じます。

Web ページにサイト ナビゲーションを追加するには

  1. Web.sitemap ファイルの url 属性にリストしたファイルごとに .aspx ページを作成します。各 .aspx ファイルのコードを次のコードに置き換えます。このコードにより、サイト マップ データを表示する各種コントロールにサイト マップが表示されます。サイト マップにリストされていない .aspx ファイルでは、サイト ナビゲーション コントロールを表示できません。

    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" runat="server">
      <title>Simple Navigation Controls</title>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
    
      <h2>Using SiteMapPath</h2>
      <asp:SiteMapPath ID="SiteMapPath1" Runat="server">
      </asp:SiteMapPath>
    
    
      <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
    
      <h2>Using TreeView</h2>
      <asp:TreeView ID="TreeView1" Runat="Server" DataSourceID="SiteMapDataSource1">
      </asp:TreeView>
    
      <h2>Using Menu</h2>
      <asp:Menu ID="Menu2" Runat="server" DataSourceID="SiteMapDataSource1">
      </asp:Menu>
    
      <h2>Using a Horizontal Menu</h2>
      <asp:Menu ID="Menu1" Runat="server" DataSourceID="SiteMapDataSource1"
        Orientation="Horizontal" 
        StaticDisplayLevels="2" >
      </asp:Menu>
    
      </div>
      </form>
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
      <title>Simple Navigation Controls</title>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
    
      <h2>Using SiteMapPath</h2>
      <asp:SiteMapPath ID="SiteMapPath1" Runat="server">
      </asp:SiteMapPath>
    
    
      <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
    
      <h2>Using TreeView</h2>
      <asp:TreeView ID="TreeView1" Runat="Server" DataSourceID="SiteMapDataSource1">
      </asp:TreeView>
    
      <h2>Using Menu</h2>
      <asp:Menu ID="Menu2" Runat="server" DataSourceID="SiteMapDataSource1">
      </asp:Menu>
    
      <h2>Using a Horizontal Menu</h2>
      <asp:Menu ID="Menu1" Runat="server" DataSourceID="SiteMapDataSource1"
        Orientation="Horizontal" 
        StaticDisplayLevels="2" >
      </asp:Menu>
    
      </div>
      </form>
    </body>
    </html>
    
  2. ファイルを保存します。

ナビゲーション コントロールに返される開始ノードを変更するには

  1. サイト マップで深さ 3 のレベルにある .aspx ページで、SiteMapDataSource コントロールを見つけます。このコントロールは、次のようなコード行です。

    <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
    
  2. 上のコード行を次のように変更します。

    <asp:SiteMapDataSource 
      ID="SiteMapDataSource1" 
      Runat="server"
      StartingNodeUrl="~/Services.aspx" />
    
  3. ファイルを保存し、ブラウザで表示します。

    Training.aspx ページのナビゲーション構造は、他の 2 つのページと異なります。このページのナビゲーション構造は 2 番目のノードから始まります。SiteMapPath は、サイト マップ データをプロバイダから直接取得し、SiteMapDataSource コントロールを必要としないので、影響を受けません。

    開始ノードを変更する場合は、次に示す別のオプションを使用します。

    • StartFromCurrentNode プロパティに true を設定すると、現在のページのノードから始まるサイト マップ構造が取得されます。

StartingNodeOffset プロパティに 2 を設定すると、ルート ノードから 2 ノードの深さで始まり、現在のページまでのパスを表すサイト マップ構造が取得されます。

開始ノードを非表示にするには

  1. サイト マップで深さ 3 のレベルにある .aspx ページで、SiteMapDataSource コントロールを見つけます。このコントロールは、次のようなコード行です。

    <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
    
  2. 上のコード行を次のように変更します。

    <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server"
      ShowStartingNode="~/Services.aspx" />
    
  3. ファイルを保存し、ブラウザで表示します。

    このページのナビゲーション構造は、他の 2 つのページとは異なります。表示される結果は、StartingNodeOffset プロパティに 1 を設定した場合や、StartingNodeUrl プロパティに ~/Services.aspx を設定した場合とは異なります。これは、サイト マップ ノード コレクションがサイト マップ全体の 1 つの分岐だけに制限されず、そのため Products ノードも表示されるからです。

    ms178423.alert_note(ja-jp,VS.90).gifメモ :

    また、開始ノードが、サイト マップのルート ノードよりも深いレベルで入れ子にされている場合は、StartingNodeOffset プロパティに負の値を設定することもできます。これは、StartFromCurrentNode プロパティに true が設定されているときに現在のノードの親から始まるサイト マップを表示する場合に役立ちます。

参照

処理手順

方法 : SiteMapPath Web サーバー コントロールの外観をカスタマイズする

概念

ASP.NET サイトマップ プロバイダの実装

ASP.NET のサイト マップ セキュリティ トリミング

ASP.NET のサイト ナビゲーションの保護

データ アクセスのセキュリティ保護

その他の技術情報

ホストされた環境での ASP.NET アプリケーションのセキュリティ