ASP.NET実践:SiteMapDataSourceコントロールで取り戻したノードをフィルタリングする

5532 ワード

SiteMapDataSourceコントロールは、ウェブサイト地図プロバイダ(例えば、XmlSiteMapProvider、ASP.NETのデフォルトのウェブサイト地図プロバイダ)によってウェブサイト地図データを取得する.SiteMapDataSourceのコントロールは、すべてのウェブサイトマップノードのセットまたは一部のサブセットを返すように構成することができる.この場合、テンプレート・ページ間の分散ナビゲーション構造が存在する場合に適用され、異なるテンプレート・ページにWebサイトの地図の一部を表示できます.
これらのWebサイトのナビゲーションコントロールを使用するには、まずWebでなければなりません.sitemapファイルでは、ウェブサイトの構造を説明し、作成ファイルのパスをウェブサイトの地図に列挙する.aspxファイル.

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

  • WebサイトのルートディレクトリにファイルWebを作成する.sitemap、次の例のコードを入力します:
    
    
    <?xml version="1.0" encoding="utf-8" ?>
    
    <siteMap>
    
    </siteMap>
    
    
  • siteMap要素のルート要素siteMapNodeを作成し、次のパラメータを定義します.
  • title.Webサイトの地図ノードのタイトルを指定し、ページにリンクされたテキストの内容を表示します.
  • url.WebページのURLを指定します.完全なURLまたは関連URL(~/default.aspxなど)アドレスを使用できます.波形(~)は、アプリケーションのルートディレクトリを表します.次に、各URLに対応するWebページを作成し、そのURLが存在しないか、重複して表示された場合にエラーが発生するため、Webマップにページを列挙します.もちろん、このパラメータ値を空に保つこともできます.ただし、本例で実現する目標としては、.aspxファイルでこのパラメータを設定します.

  • ヒント:1つのWebサイトの地図には、siteMapNode個の要素が1個しか表示されませんが、ルート要素にはsiteMapNode個のサブ要素がいくつか含まれています.
  • siteMapNode要素のsiteMapNodeサブ要素を作成します.上記の手順に従って同じパラメータを設定します.
  • 前の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>
    
    
  • Webを保存して閉じる.sitemapファイル.

  • Webサイトのナビゲーションをページに追加

  • はそれぞれWebである.sitemapファイルのリストurlパラメータのファイルパスは、対応するものを作成する.aspxページ.これらのために.aspxファイルには、コントロールにWebサイトの地図データを表示するための次のコードが追加されています.もしあるならば.aspxファイルは、Webサイトの地図に漏れており、Webサイトのナビゲーションコントロールに表示されません.
    
    
    <%@ 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>
    
    
  • ファイルを保存します.

  • ナビゲーションコントロールが返す開始ノードの変更

  • は3階のウェブサイトの地図のです.aspxページでは、SiteMapDataSourceのコントロールが表示されます.コード定義は、
    
    
    <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
    
    
  • です.
  • 次に、上記のコードの内容を変更します:
    
    
    <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server"
    
      StartingNodeUrl="~/Services.aspx" />
    
    
  • ファイルを保存し、ブラウザを開いて表示します.その結果、Training.aspxページのナビゲーション構造は他の2つのページとは異なります.構造は第2のノードから始まるため、SiteMapPathのコントロールが何の役割も果たしていないことを示している.なぜなら、SiteMapDataSourceのコントロールを使用する必要がなく、プロバイダからウェブサイトの地図のデータを直接取得することができるからである.ノードの開始位置を変更する必要がある場合にのみ有効な他のオプションがあります.
  • StartFromCurrentNodeプロパティをtrueに設定します.すなわち,現在のページを指すノードからウェブサイトの地図構造を取得する.

  • StartingNodeOffsetプロパティを2に設定します.すなわち,ルートディレクトリ以下の2層の深さのサブディレクトリを先頭とし,現在のページの経路に沿ってウェブサイト地図構造を取得する.

    開始ノードを非表示

  • は3階のウェブサイトの地図のです.aspxページでは、SiteMapDataSourceのコントロールが表示されます.コード定義は、
    
    
    <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
    
    
  • です.
  • 次に、上記のコードの内容を変更します:
    
    
    <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server"
    
      ShowStartingNode="~/Services.aspx" />
    
    
  • ファイルを保存し、ブラウザを開いて表示します.その結果,ページ内のナビゲーション構造は他の2つのページと異なることが分かった.表示結果は、設定StartingNodeOffsetにおける属性値が1または設定StartingNodeUrlにおける属性値が~/Servicesである.Aspxは、Webサイトの地図ノードセットがWebサイト全体の地図に1つのブランチしかないという制限に影響されず、Productsノードをスムーズに表示できるため、異なる.ヒント:Webサイトマップの開始ノードの位置がルートノードよりも深い場合は、StartingNodeOffsetのプロパティ値を負数に設定することもできます.一般に、StartFromCurrentNodeの属性値がtrueであり、現在のノードの親ノードを先頭としてウェブサイトマップを表示する場合に用いられる.