3

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

ответ

6

Try вызвать Обновить до того меню или карты сайта визуализации.

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

Могу ли я вызвать «Refresh» из контроллера? – Shimmy

+0

Это, похоже, не существует в текущей версии – toddmo

0

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

<siteMap defaultProvider="MvcSiteMapProvider" enabled="true"> 
    <providers> 
    <clear /> 
    <add name="MvcSiteMapProvider" 
     type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider" 
     cacheDuration="5" /> 
    </providers> 
</siteMap> 
+0

К сожалению, это не сработало. Достаточно дождаться финальной версии 3.0 и самостоятельно изменить источник, чтобы удалить кеширование. Я бы предпочел вариант отключения кэширования, хотя я могу продолжать легко обновлять MvCSiteMapProvider, поскольку новые выпуски отправляются в CodePlex ... – Scott

0

Немного Hacky, но кто заботится:

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

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

MvcSiteMapProvider 4.0 - Extending the Cache

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

+0

Веб-сайт кажется пустым. Во всяком случае, как мы просто выключаем кеширование? – toddmo