2008-08-01 5 views
29

作成経験がある方SQLベースのASP.NETサイトマッププロバイダ?ASP.NETサイトマップ

私は私のメニューとSiteMapPathはコントロールで正常に動作し、デフォルトのXMLファイルweb.sitemapがありますが、私は私のサイトのユーザーは、動的にページを作成および変更するための方法が必要になります。

標準のASP.NETメンバーシップシステムにページ閲覧許可を結びつける必要があります。

+1

最高の回答をお選びください。 – mruanova

答えて

10

のMSDNマガジンからジェフ・プロシースバージョンはかなりうまく動作しますが、それはいくつかの弱点があります:あなたのメニュー上の外部サイトへのリンクとアウト

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; 
    } 
} 
関連する問題