2011-06-14 4 views
3

출력 캐싱을 사용하여 동일한 정적 쿼리로 데이터베이스를 반복해서 쓰지 않으려 고하지만 컨트롤러에 고유하게 정의 된 매개 변수가 있습니다. 게시하다.asp.net-mvc에서 컨트롤러 동작의 매개 변수를 기반으로 출력 캐싱을 사용할 수 있습니까?

내 매개 변수를 고려하고 asp.net-mvc에서 출력 캐싱을 계속 지원할 수 있습니까?

+0

여러 매개 변수로 어떻게 다릅니 까? – Zapnologica

답변

7

OutputCache 속성의 VaryByParam 속성을 확인하십시오.

[OutputCache(Duration=int.MaxValue, VaryByParam="id")] 
public ActionResult Details(int id) 
{ 
} 

각 고유 한 id 값에 대해 고유 한 캐시 인스턴스가 생성됩니다.

편집 : 캐싱 요구는 간단 VaryByParam 특성 시나리오 넘어 가면

그때는 VaryByCustom를보십시오. 이렇게하면 적합하다고 생각되는 시나리오 (로그인 한 사용자와 로그인하지 않은 사용자의 캐시 된 버전 등)를 설정할 수 있습니다.

+0

내 매개 변수가 여러 속성을 가진 개체 인 경우 해당 작업을 수행합니까 ?? – leora

+0

당신은 알고 있어야하는 몇 가지 부작용이있을 수 있지만. 예를 들어이 게시물을 참조하십시오 : http://stackoverflow.com/questions/5144592/partial-page-caching-and-varybyparam-in-asp-net-mvc-3 그래서 당신은 개체를 전달할 수 VaryByParam = "*" 예를 들어, 결국에는 권장 사항 (또는 내 의견으로 말하면)은 사용할 수있는 고유 한 프리미티브 값 또는 프리미티브 세트를 갖는 것입니다. – Khepri

+0

링크를 이용해 주셔서 감사합니다. 명확하게하기 위해, 예제 링크에서, Ids가 일치하는 한 그 부분 페이지가 캐싱 될 것입니다. 일치하는 ID가 있지만 콘텐츠의 속성이 변경되면 어떻게됩니까? 그래도 캐시 된 결과가 생성됩니까? 그렇다면, 그것은 내가 원하는 것이 아닙니다. 캐싱을 각각의 고유 한 객체와 1 : 1 매핑으로하고 싶습니다. 나는 문자열의 모든 속성을 고려하여 고유 한 문자열이되도록 ToString()을 객체에 재정의 할 수 있다고 생각합니다. 그럴거야, 맞지? – leora

관련 문제