Отключить кэширование MvcSiteMapProvider - PullRequest
4 голосов
/ 24 января 2011

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

Ответы [ 4 ]

6 голосов
/ 12 февраля 2012

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

<% var sm = Html.MvcSiteMap();
((MvcSiteMapProvider.DefaultSiteMapProvider)sm.Provider).Refresh(); %>
....
<%: sm.Menu(0, 1) %>
2 голосов
/ 18 августа 2013

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

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

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

0 голосов
/ 02 июля 2013

Немного хак, но кого это волнует:

        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;
        }
0 голосов
/ 24 января 2011

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

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