2010-05-21 3 views
1

저는 아약스를 통해 많은 콘텐츠를 가져 오는 웹 응용 프로그램을 가지고 있습니다. 예를 들어 사용자가 일부 데이터를 편집하면 브라우저는 ajax 게시물을 사용하여 변경 사항을 전송 한 다음 ajax get을 실행하여 새로운 컨텐츠를 얻고 페이지의 기존 div를 해당 컨텐츠로 대체합니다. 이것은 MVC1로만 발견되었지만 MVC2에서는 일치하지 않는 결과가 나타납니다.ASP.NET MVC2 및 브라우저 캐싱

기본적으로 MVC1에는 현재 시간으로 설정된 응답 헤더에 만료 항목이 포함되어 있지만 MVCS2에서는 만료 헤더가 없습니다. 이것은 일부 브라우저 (IE8)에서 실제로 캐시 된 버전의 ajax get을 새로운 버전 대신 사용하는 경우 발생합니다.

문제를 해결하기 위해 응답 캐시를 NoCache (아래 참조)로 설정하는 간단한 ActionFilterAttribute를 만들었지 만,이 속성을 사용하여 모든 컨트롤러를 꾸미기에는 실례가되었습니다. 모든 컨트롤러에 대해이를 설정하는 글로벌 방식이 있습니까?

이것은 MVC2의 버그이며 모든 ActionResult/view/page에서 만료를 설정해야합니다. 부실 데이터가 매우 나쁜 곳에서는 대부분의 MVC 프로그램이 데이터 입력을 처리하지 않습니까?

감사


public class ResponseNoCachingAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     base.OnResultExecuted(filterContext); 

     filterContext.HttpContext.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); 
    } 
} 

답변

4

는 컨트롤러에 다음 속성을 추가하려고 했습니까?

[OutputCache(Location = OutputCacheLocation.None)] 
+0

예, 작동합니다. 전에 그 속성을 알아 차리지 못했습니다. 어딘가에 글로벌 설정을하는 대신 모든 컨트롤러에이 속성을 추가해야한다는 것은 어리석은 것처럼 보입니다. 감사. – Dan

+4

속성으로 적절히 이름 붙여진 추상 기본 클래스 컨트롤러를 선언하고 모든 컨트롤러가 그 속성을 상속받을 수 있습니다. –