2007年8月10日金曜日

ASP.NET マスターページにSiteMapPathコントロールを配置

マスターページにSiteMapPathコントロールを配置します。
SiteMapPathコントロールはサイト内における現在のページの位置を上位ページからのリンクリストの形式で表したもので「トピックパス」「パンくずリスト」などと呼ばれます。
SiteMapPathコントロールを使用することでユーザは現在自分がいるサイト内の位置を直感的に把握できます。

以下の構成になるように必要なファイルを作成していきます。
AspNetSampleプロジェクト
 |-Top.aspx
 |-AspNetSample.Master
 |-Web.sitemap
 |-SiteMapPathフォルダ
    |-ChildA.aspx
    |-ChildB.aspx
    |-GrandchildA.aspx
    |-GrandchildB.aspx

プロジェクト直下にマスターページ[AspNetSample.Master]を作成します。
ヘッダー部分にSiteMapPathコントロールを配置します。


プロジェクト直下に[SiteMapPathフォルダ]を作成します。

[SiteMapPathフォルダ]内に[ChildA.aspx]、[ChildB.aspx]、[GrandchildA.aspx]、[GrandchildB.aspx]を作成します。
マスターページは[AspNetSample.Master]を指定してください。
[ChildA.aspx]のContentPlaceHolderコントロールに[GrandchildA.aspx]へのHyperLinkコントロールを配置します。

[ChildB.aspx]のContentPlaceHolderコントロールに[GrandchildB.aspx]へのHyperLinkコントロールを配置します。

[GrandchildA.aspx]、[GrandchildB.aspx]は何も配置しません。

プロジェクト直下にWebコンテンツフォーム[Top.aspx]を作成します。
マスターページは[AspNetSample.Master]を指定してください。
ContentPlaceHolderコントロールに[ChildA.aspx]と[ChildB.aspx]へのHyperLinkコントロールを配置します。


プロジェクト直下に「新しい項目の追加」より「サイトマップ」を追加します。
プロジェクト直下に「Web.sitemap」が作成されます。
サイトマップはプロジェクト直下に配置する必要があります。
私は最初[SiteMapPathフォルダ]内に作成してしまったためにハマリました。
サイトマップには親ノード、子ノード、孫ノードを入れ子になるように記述します。


siteMapNode要素の属性は
【url属性】
メニューのURLを指定します。
サイトマップ内で一意になる必要があります。
アプリケーションルートからの相対パスを指定します。
【title属性】
SiteMapPathコントロール上で表示されるメニュー名を指定します。
【description属性】
メニュー名にマウスポインタを乗せた時に表示されるツールチップなどに利用されます。
【roles属性】
アクセスを許可するロール名を指定します。
【resourceKey属性】
リソースファイルのキー名を指定します。


SiteMapPathコントロールを利用するには、単にページ上にコントロールを配置するだけでOKです。
SiteMapPathコントロールはデフォルトでサイトマップファイルを読み込み「現在のページのURLとサイトマップファイル内のsiteMapNode要素のurl属性とマッチした箇所」を基点としてリンクリストを作成します。現在のページがサイトマップファイル内に登録されていない場合には、正しく表示されません。


実行してみると「パンくずリスト」が確認できます。



ASP.NETすご~い!!
コードレスでここまでできるんですね。
今までのASPでは考えられないです。
ASPでは動的にHTMLを生成している=プログラミングみたいな感じでしたけど
これでやっとHTMLから開放されて本来のプログラミングに専念できますね。

0 件のコメント: