Отключить кэширование MvcSiteMapProvider

Кажется, что с MvcSiteMapProvider происходит автоматическое кэширование. Есть ли механизм отключения кеширования? У нас есть написанные пользовательские процедуры кэширования, и я хочу выполнить их, вместо того чтобы полагаться на какой-либо встроенный механизм кэширования.

4 ответа

Решение

Попробуйте вызвать Refresh до отображения меню или карты сайта.

<% var sm = Html.MvcSiteMap();
((MvcSiteMapProvider.DefaultSiteMapProvider)sm.Provider).Refresh(); %>
....
<%: sm.Menu(0, 1) %>

В MvcSiteMapProvider v4 кеш теперь может быть расширен или заменен вашей собственной реализацией. Посмотрите на следующий пост в блоге, который я написал.

MvcSiteMapProvider 4.0 - расширение кеша

Под покровами теперь используется System.Runtime.Caching.ObjectCache, абстрактный класс, который можно заменить менеджером кеша по вашему выбору.

Немного хакерский, но кого это волнует

        foreach (var c in from object c in HttpContext.Cache where ((System.Collections.DictionaryEntry)c).Key.ToString().Contains("__MVCSITEMAP") select c)
        {
            HttpContext.Cache.Remove(((System.Collections.DictionaryEntry)c).Key.ToString());

            break;
        }

Просматривая источник, элемент кэша всегда создается при создании карты сайта, сохраняя элемент в HttpContext.Current.Cache, Время жизни этого элемента кэша настраивается из свойства в конфигурации cacheDuration, Если этот атрибут отсутствует в конфигурации, по умолчанию используется значение 5. Попробуйте установить для этого атрибута конфигурации значение 0.

<siteMap defaultProvider="MvcSiteMapProvider" enabled="true"> 
  <providers> 
    <clear /> 
    <add name="MvcSiteMapProvider" 
         type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider" 
         cacheDuration="5" /> 
  </providers> 
</siteMap>
Другие вопросы по тегам