Кажется, что автоматическое кэширование происходит с MvcSiteMapProvider. Есть ли механизм для отключения кэширования? У нас есть настраиваемые подпрограммы для кэширования, и я хочу запустить их через них, а не полагаться на любой встроенный механизм кэширования.Отключить кэширование MvcSiteMapProvider
ответ
Try вызвать Обновить до того меню или карты сайта визуализации.
<% var sm = Html.MvcSiteMap();
((MvcSiteMapProvider.DefaultSiteMapProvider)sm.Provider).Refresh(); %>
....
<%: sm.Menu(0, 1) %>
Оглядываясь на источник, элемент кэша всегда создается при создании карты сайта, сохраняя элемент в HttpContext.Current.Cache
. Время жизни этого элемента кэша настраивается из свойства в конфигурации cacheDuration
. Если этот атрибут опущен из конфигурации, то по умолчанию 5. Попробуйте установить этот атрибут конфигурации 0.
<siteMap defaultProvider="MvcSiteMapProvider" enabled="true">
<providers>
<clear />
<add name="MvcSiteMapProvider"
type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider"
cacheDuration="5" />
</providers>
</siteMap>
К сожалению, это не сработало. Достаточно дождаться финальной версии 3.0 и самостоятельно изменить источник, чтобы удалить кеширование. Я бы предпочел вариант отключения кэширования, хотя я могу продолжать легко обновлять MvCSiteMapProvider, поскольку новые выпуски отправляются в CodePlex ... – Scott
Немного 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;
}
В MvcSiteMapProvider v4, кэш теперь может быть расширен или заменен на собственной реализации. Взгляните на следующее сообщение в блоге, которое я написал.
MvcSiteMapProvider 4.0 - Extending the Cache
Под одеялом теперь использует System.Runtime.Caching.ObjectCache, абстрактный класс, который может быть заменен менеджером кэша вашего выбора.
Веб-сайт кажется пустым. Во всяком случае, как мы просто выключаем кеширование? – toddmo
Могу ли я вызвать «Refresh» из контроллера? – Shimmy
Это, похоже, не существует в текущей версии – toddmo