Карты сайтов ASP.NET

Есть ли у кого-нибудь опыт создания SQL-based ASP.NET site-map providers?

У меня есть стандартный XML файл web.sitemap, работающий должным образом с моими элементами управления Menu и SiteMapPath, но мне'нужен способ для пользователей моего сайта создавать и изменять страницы динамически.

Мне нужно связать разрешения на просмотр страниц со стандартной системой членства ASP.NET.

Версия Jeff Prosise из журнала 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 - это здорово, но если вы не хотите каждый раз при загрузке меню обращаться к БД (чтобы проверить, не изменилась ли зависимость), а меню меняется нечасто, то почему бы вместо этого не использовать 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;
    }
}
Комментарии (0)