SQLベースのASP.NETサイトマッププロバイダーを作成した経験のある人はいますか?
web.sitemap
メニューおよびSiteMapPathコントロールでデフォルトのXMLファイルが正しく機能していますが、サイトのユーザーがページを動的に作成および変更する方法が必要です。
ページの表示権限を標準のASP.NET
メンバーシップシステムにも関連付ける必要があります。
MSDN マガジンの Jeff Prosise バージョンはかなりうまく機能しますが、いくつかの欠点があります。
AddNode
メニューに外部サイトへのリンクが表示される (www.google.com など)
これが私の修正ですBuildSiteMap()
:
SiteMapNode node = GetSiteMapNodeFromReader(reader);
string url = node.Url;
if (url.Contains(":"))
{
string garbage = Guid.NewGuid().ToString(); // SiteMapNode needs unique URLs
node.Url = "~/dummy_" + garbage + ".aspx";
AddNode(node, _root);
node.Url = url;
}
else
{
AddNode(node, _root);
}
SQLDependency
キャッシングは便利ですが、メニューが読み込まれるたびに (依存関係が変更されたかどうかを確認するために) DB にアクセスしたくない場合や、メニューがあまり頻繁に変更されない場合は、HttpRuntime.Cache
代わりに使用しないでください。
public override SiteMapNode RootNode
{
get
{
SiteMapNode temp = (SiteMapNode)HttpRuntime.Cache["SomeKeyName"];
if (temp == null)
{
temp = BuildSiteMap();
HttpRuntime.Cache.Insert("SomeKeyName", temp, null, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration);
}
return temp;
}
}