1

내가 가지고있는 컨트롤러라고 GetTypes()의 메소드를 호출하는 컨트롤러URL을 통해 호출되지 않으면 MVC3 outputcache가 캐시되지 않습니다. 옳은?

[OutputCache(Duration = 6000)] 
public List<SelectListItem> GetTypes() 
{ 
    return Datetime.Now(); 
} 

내가 또 다른 액션 메소드에서 내 컨트롤러의 내부에서 호출하면 왜이 방법 캐시하지 않습니다? 단지 내가 직접 URL 또는 @Render ..

"로컬 호스트/홈/GetTypes"

답변

3

그래, 그것이 작동하는 방식은을 사용하여 호출 할 때 캐시 것, 그리고 방법이 작동합니다.

이유는 속성이 마법처럼 작동하지 않기 때문입니다. 뭔가 조사하고 그들을 바탕으로 일을해야합니다. 이 코드는 요청을 처리 할 때 일반적인 MVC 파이프 라인의 일부입니다.

이 메서드를 직접 호출하면 일반 파이프 라인을 무시하므로 특성이 평가되거나 실행되지 않습니다.

그 외에도 캐싱은 응답에만 적용된다는 단순한 상식을 말해야합니다. 응답이 없으면 (직접 전화했기 때문에) 적용되지 않습니다.

하위 작업을 대신 실행해야합니다. 어떻게 할 것인가는 방법을 호출하는 위치와 방법에 따라 다릅니다. 따라서 메서드 (및 그 주변 컨텍스트)를 호출하는 코드를 표시하지 않으면 더 이상 당신을 도울 수 없습니다.

관련 문제