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

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

2 Ответы

0 голосов
от
У кого-нибудь есть опыт создания на основе SQL ASP.NET карты веб-провайдеров? У меня по умолчанию XML-файл
web.sitemap
работает должным образом с моим меню и элементы управления SiteMapPath, но мне нужен способ для пользователей моего сайта для создания и динамического изменения страниц. Мне нужно привязать страницу разрешений на просмотр в стандартной системе членства
ASP.NET
, а также.
0 голосов
от
Джефф версия 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;
    }
}
...