禁用 MvcSiteMapProvider 缓存

发布于 2024-10-14 04:47:31 字数 89 浏览 1 评论 0原文

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

There seems to be automatic caching that happens with MvcSiteMapProvider. Is there a mechanism to disable caching? We have custom caching routines written and I want to run it through those instead of relying on any built in caching mechanism.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

最终幸福 2024-10-21 04:47:31

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

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

Try to call Refresh before render menu or sitemap.

<% var sm = Html.MvcSiteMap();
((MvcSiteMapProvider.DefaultSiteMapProvider)sm.Provider).Refresh(); %>
....
<%: sm.Menu(0, 1) %>
你爱我像她 2024-10-21 04:47:31

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

MvcSiteMapProvider 4.0 - 扩展缓存

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

In MvcSiteMapProvider v4, the cache can now be extended or replaced with your own implementation. Have a look at the following blog post that I wrote.

MvcSiteMapProvider 4.0 - Extending the Cache

Under the covers it now uses System.Runtime.Caching.ObjectCache, an abstract class that can be replaced by a cache manager of your choosing.

顾冷 2024-10-21 04:47:31

查看源代码,在构建站点地图时总是会创建一个缓存项,并将该项存储在HttpContext.Current.Cache中。此缓存项的生命周期是通过配置 cacheDuration 中的属性进行配置的。如果配置中省略此属性,则默认为 5。尝试将该配置属性设置为 0。

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

Looking over the source, a cache item is always created when the sitemap is built, storing the item in HttpContext.Current.Cache. The lifetime of this cache item is configured from a property in the configuration cacheDuration. If this attribute is omitted from the configuration, it defaults to 5. Try setting that configuration attribute to 0.

<siteMap defaultProvider="MvcSiteMapProvider" enabled="true"> 
  <providers> 
    <clear /> 
    <add name="MvcSiteMapProvider" 
         type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider" 
         cacheDuration="5" /> 
  </providers> 
</siteMap>
温柔戏命师 2024-10-21 04:47:31

有点老套,但谁在乎:

        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;
        }

A bit hacky but who cares:

        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;
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文