Domanda

Sembra che ci sia il caching automatico che accade con MvcSiteMapProvider. Esiste un meccanismo di caching disabilitare? Abbiamo personalizzato caching routine scritte e voglio correre attraverso quelle, invece di fare affidamento su qualsiasi costruito nel meccanismo di caching.

È stato utile?

Soluzione

Prova a chiamare Refresh prima di menu o mappa del sito di rendering.

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

Altri suggerimenti

In MvcSiteMapProvider v4, la cache può ora essere esteso o sostituita con una propria implementazione. Date un'occhiata al seguente post sul blog che ho scritto.

MvcSiteMapProvider 4.0 - Estendere la cache

Sotto le coperte che ora utilizza System.Runtime.Caching.ObjectCache, una classe astratta che può essere sostituito da un manager di cache di tua scelta.

Guardando oltre la fonte, una voce di cache viene sempre creato quando la mappa del sito è costruito, memorizzare l'oggetto in HttpContext.Current.Cache. La durata di questa voce di cache è configurato da una proprietà nella cacheDuration configurazione. Se questo attributo viene omesso dalla configurazione, il valore predefinito è 5. provare a impostare l'attributo di configurazione a 0.

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

Un po 'hacky ma che importa:

        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;
        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top