by WebSurfer
2010年9月28日 14:07
ASP.NET には、アプリケーションルートに配置した web.sitemap ファイル 1 箇所にサイトナビゲーションデータをまとめて格納しておき、SiteMapPath, TreeView, Menu コントロールを利用してサイト構造の表示や移動を行う機能が用意されています。
詳しい解説は MSDN ライブラリの「ASP.NET サイト ナビゲーションの概要」に述べられています。
このライブラリの最後の方に書いてある SiteMap オブジェクトの取得について、忘れないように書いておきます。
これは自分で XmlSiteMapProvider などを初期化して取得するのではなく、ASP.NET によって自動的に生成されるサイトのナビゲーション構造のインメモリ表現であり、単純に SiteMap として参照が取得できます。
例えば、あるページの Title タグに、web.sitemap の当該項目の title を表示する場合、以下のようにできます。SiteMap の初期化を自分で行う必要はありません。
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = SiteMap.CurrentNode.Title;
}
それを知らなかったので、昔は以下のようにしていたのですが、そんな無駄なことをする必要は全くなかったようです。無知でした。(恥) MSDN ライブラリの解説からは読めなかったんです。
protected void Page_Load(object sender, EventArgs e)
{
XmlSiteMapProvider provider = new XmlSiteMapProvider();
NameValueCollection attributes = new NameValueCollection(1);
attributes.Add("siteMapFile", "web.sitemap");
provider.Initialize("testProvider", attributes);
provider.BuildSiteMap();
SiteMapNode node = provider.CurrentNode;
Page.Title = node.Title;
}