MvcSiteMapProvider 似乎发生了自动缓存。是否有禁用缓存的机制?我们编写了自定义缓存例程,我想通过这些例程运行它,而不是依赖任何内置的缓存机制。
问问题
3139 次
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 中,缓存现在可以扩展或替换为您自己的实现。看看我写的以下博客文章。
在幕后,它现在使用 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 回答