2010-04-18 5 views
2

방금 ​​ASP.NET 3.5에서 4.0으로 내 사이트를 업그레이드했습니다. 나는 몇 가지 큰 변화를 겪고 있었고 예상했던 것보다 더 많은 것이있었습니다.왜 내 ASP가 : 대체 컨트롤이 갑자기 ASP.NET 4.0에서 작동하지 않습니까?

그러나 내가 이해할 수없는 것은 내 <asp:Substitution /> 컨트롤이 갑자기 작동하지 않는 이유입니다. 상위 페이지의 출력 캐시 설정을 무시하고 모든 요청시 업데이트합니다. 어떤 이유로 그것은 일어나지 않습니다. 전체 10 분 (내 홈 페이지의 OutputCache 설정) 동안 캐시됩니다. 어떤 아이디어?

답변

2

< asp : 대체 > 및 기타 서버 컨트롤은 MVC에서 지원되지 않습니다. 응답 대체는 특히 WebForms 파이프 라인과 복잡하게 연관되어 있습니다. MVC 1에서 작동한다는 사실은 행복한 사고 였지만 의도적 인 것은 아니 었습니다.

MVC 팀은 MVC 3 이상에서 대체 캐싱을 사용하는 방법을 연구하고 있지만이를 수행하기위한 MVC 특정 메커니즘이있을 수 있으므로 ASP : Substitution > 또는 Response.WriteSubstitution) 앞으로 나아갈 것입니다. 그 동안 최선의 방법은 전체 페이지를 캐시에 저장 한 다음 Javascript/AJAX를 사용하여 클라이언트가 업데이트해야하는 부분을 채우게하는 것입니다.

+0

감사합니다. 다른 해결 방법을 찾았습니다. 실제로 캐시 된 것으로부터 이익을 얻는 페이지 섹션이 하나뿐이기 때문에 전략을 변경했습니다. 결과적으로 Web Forms 컨트롤 인 것처럼 페이지에 추가하면 Partial View에서 OutputCache 지시문을 사용할 수 있습니다. http://www.highoncoding.com/Articles/638_Understanding_Partial_Views_in_ASP_NET_MVC_Application.aspx –

+0

I .ascx에서 <% @ OutputCache %>를 사용하는 것을 피하십시오. 이는 또한 추한 해킹이기 때문에 (대체 캐싱이 어떻게 망가 졌는지와 마찬가지로) 앞으로 나아갈 것이라고 보장되지 않습니다. 페이지의 일부만 캐시해야하는 경우 ASP.NET 4 용 MVC Futures의 [ChildActionCache] 특성 사용을 고려하십시오 (http://aspnet.codeplex.com/releases/view/41742). 이 속성은 Html.RenderAction()의 대상인 메소드에 적용 할 수 있으며 지정된 기간 동안 해당 RenderAction()의 내용 만 캐시됩니다. – Levi