Карты сайта ASP.NET - PullRequest
       72

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

36 голосов
/ 01 августа 2008

Есть ли у кого-нибудь опыт создания ASP.NET на основе SQL поставщиков карты сайта?

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

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

1 Ответ

13 голосов
/ 24 сентября 2008

Версия 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;
    }
}
...