3

MvcSiteMapProvider에서 발생하는 자동 캐싱이있는 것 같습니다. 캐싱을 비활성화하는 메커니즘이 있습니까? 우리는 작성된 커스텀 캐싱 루틴을 가지고 있으며, 캐싱 메커니즘에 의존하지 않고이를 실행하려고합니다.MvcSiteMapProvider 캐싱 사용 안 함

답변

6

시도에 해당 구성 속성을 설정하십시오.

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

컨트롤러에서'새로 고침 '을 호출 할 수 있습니까? – Shimmy

+0

현재 버전에서는 보이지 않습니다. – toddmo

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

0

A는 해키 비트 만 관심이있는 사람 : MvcSiteMapProvider의 V4에서

 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

는 캐시가 지금 확장하거나 자신의 구현으로 대체 할 수있다. 내가 작성한 다음 블로그 게시물을 살펴보십시오. 지금 System.Runtime.Caching.ObjectCache, 사용자가 선택한 캐시 관리자에 의해 대체 될 수있는 추상 클래스를 사용하여 내부적으로

MvcSiteMapProvider 4.0 - Extending the Cache

.

+0

웹 사이트가 다운 된 것 같습니다. 어쨌든, 캐싱을 끄려면 어떻게해야합니까? – toddmo