2011-11-07 1 views
3

부분보기에서 다른 OutputCache 속성을 설정하려고하면 PartialView 캐시가 부모 출력 캐시 기간을 사용하는 것으로 나타납니다. 다음 코드와 나는 RenderPartial이 짧은 OutputCache를 지속 시간을 초래할 것이라는 점을 희망하지만 난 그게 (십초)에 DateTime.Now에서 보여주는 간단한 예제로MVC3 부분보기 부모보기로 OutputCache를 재정 의하여

public class HomeController : Controller 
{ 
    [OutputCache(Duration=10, VaryByParam="none")] 
    public ActionResult Index() 
    { 
     ViewBag.Message = "Time now: "+ DateTime.Now.ToString(); 

     return View(); 
    } 

    [ChildActionOnly] 
    [OutputCache(Duration=5, VaryByParam="none")] 
    public PartialViewResult LogonPartial() 
    { 
     return PartialView("_LogOnPartial"); 
    } 
} 

상위 뷰와 동일한 것을 발견 PartialView는 부모보기가 자신을 비울 때까지 PartialView가 캐시를 지우지 않는다는 것을 알았습니다. 부분보기 지우기의 캐시가 매 5 초마다 (부모보기와 같이 매 10 분마다가 아니라) 희망하기를 바랍니다. PartialView에서 OutputCache를 사용하는 예제에서는 캐시가 포함 된 뷰가 아닌 PartialView에서 구현됩니다. MVC3에서 캐싱의 한계가 있거나 동일한 페이지에서 다른 캐싱 메커니즘을 처리 할 수있는 다른 방법이 있다면 누구에게 알 수 있습니까? 미리 감사드립니다!

답변

3

전체 상위보기를 10 초 동안 캐시했습니다. 즉, 10 초 동안 하위 작업이 실행되지 않고 전체보기가 캐시에서 제공됩니다. 하위 작업의 캐시가 5 초 후에 만료 되더라도 여전히 공격을받지 않습니다.

ASP.NET MVC 3에서는 하위 작업의 OutputCache 특성을 사용하여 페이지의 일부를 캐시하는 도넛 구멍 캐싱 만 지원됩니다. 도넛 캐싱은 지원되지 않습니다 (이 캐시에서 캐싱 된 페이지의 일부 제외).

+0

대린 감사합니다. 나는이 문제를 해결할 수있는 방법이 있기를 희망했지만 그 대답은 많은 의미가 있습니다. 이제 도넛을 원해! – likestoski

+0

출력 캐싱의 경우 '모범 사례'에는 어떤 것이 있습니까? 이 시나리오에서 전체 페이지를 캐싱하면 로그 아웃 링크를 눌렀을 때 _LogOnPartial이 새로 고쳐지지 않게됩니다. – likestoski