35


2

ASP.NETサイトマップ

SQLベースのASP.NETサイトマッププロバイダを作成した経験がある人はいますか?

私のデフォルトのXMLファイル `web.sitemap`は私のMenuと* SiteMapPath *コントロールで正しく動作していますが、私のサイトのユーザーが動的にページを作成したり修正したりする方法が必要になります。

私はページ閲覧許可を標準の「ASP.NET」会員制にも結び付ける必要があります。

1 Answer


13


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;
    }
}