4

MvcSiteMapProvider 似乎发生了自动缓存。是否有禁用缓存的机制?我们编写了自定义缓存例程,我想通过这些例程运行它,而不是依赖任何内置的缓存机制。

4

4 回答 4

6

尝试在渲染菜单或站点地图之前调用 Refresh。

<% var sm = Html.MvcSiteMap();
((MvcSiteMapProvider.DefaultSiteMapProvider)sm.Provider).Refresh(); %>
....
<%: sm.Menu(0, 1) %>
于 2012-02-11T21:31:01.433 回答
2

在 MvcSiteMapProvider v4 中,缓存现在可以扩展或替换为您自己的实现。看看我写的以下博客文章。

MvcSiteMapProvider 4.0 - 扩展缓存

在幕后,它现在使用 System.Runtime.Caching.ObjectCache,这是一个可以由您选择的缓存管理器替换的抽象类。

于 2013-08-18T10:04:44.850 回答
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>
于 2011-01-24T19:17:45.617 回答
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;
        }
于 2013-07-02T08:55:06.243 回答