3

似乎有MvcSiteMapProvider發生自動緩存。有沒有一種機制來禁用緩存?我們編寫了定製的緩存例程,我想通過這些例程來運行它,而不是依賴任何內置的緩存機制。禁用MvcSiteMapProvider緩存

回答

6

嘗試之前調用刷新呈現菜單或站點地圖。

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

我也可以從控制器調用「Refresh」嗎? – Shimmy 2015-07-20 19:31:35

+0

這似乎並不存在於當前版本 – toddmo 2017-01-24 18:27:09

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> 
+0

不幸的是,沒有奏效。可能只是等待3.0最終版本,並自己修改源以刪除緩存。我寧願選擇禁用緩存,以便隨着新版本發佈到CodePlex,我可以繼續輕鬆更新MvCSiteMapProvider ... – Scott 2011-01-24 20:03:27

0

有點哈克但誰在乎:

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

在MvcSiteMapProvider V4,緩存現在可以擴展或您自己的實現替換。看看我寫的以下博客文章。

MvcSiteMapProvider 4.0 - Extending the Cache

在它現在使用System.Runtime.Caching.ObjectCache,可以由你選擇的緩存管理器來代替一個抽象類的封面。