2012-03-21 3 views

답변

12

, 내 의견으로는이 컨트롤러는 단지 너무 UI를 일 무슨 결정에 관여하는 것을 의미한다. 결정할보기에만이 것을 남겨 두는 것이 가장 좋습니다.

당신이 요구하는지에 가까운

현재 "~/Views/_ViewStart.cshtml"에서이 작업을 수행하는 것입니다 "~/Views/_ExternalLayout.cshtml"이 다른 레이아웃입니다

@{ 
    if(Context.Request.Path.StartsWith("/External", StringComparison.OrdinalIgnoreCase)) 
    Layout = "~/Views/_ExternalLayout.cshtml"; 
    else 
    Layout = "~/Views/_Layout.cshtml"; 
} 

.

거기에 정확한 "/"가 정확한지 확인하고 싶을 수도 있습니다. 그렇다면 기억이 안납니다.

기존의 _ViewStart에 이것을 넣으면, "/External"으로 시작하는 URL에 대한 응답으로 렌더링되는 모든보기가이 새로운 레이아웃을 사용합니다. 그렇지 않으면 '보통'보기가 사용됩니다.

또 다른 접근법은 라우팅 테이블을 사용하여 여기에 사용할 수있는 경로 값을 추가하여 레이아웃을 결정하는 것입니다. 그러나 나는이 접근법을 단순하게 유지하기 위해 갔다.

+0

"/ External/View"에 대해 동일한 PlayerController를 사용할 것입니다. 그래서 어떻게 든 라우팅을 지정해야합니까? –

+0

@ NikitaMartyanov - 동일한 컨트롤러를 다시 사용하기 때문에 약간의 대답이 변경되었지만 원래 솔루션은 다른 컨트롤러에 적합하지만 다른 URL에 대한 뷰와 컨트롤러를 재사용 할 때는 적합하지 않습니다. –

+0

감사합니다, Andras -이 접근법을 사용했습니다 (또한 "Exteranal/View"가 'PlayerController'에 매핑되도록 경로를 추가했습니다. –

8

'ExternalController'컨트롤러 동작 내에서보기를 반환 할 때 사용할 레이아웃을 지정할 수 있습니다. 다른 답변에서 제안 된대로 컨트롤러에서 레이아웃을 재정의 할 수 있지만

return View("View", "~/Views/Shared/_AnotherLayout.cshtml") 
+0

감사합니다. 내 하루 안전 : D –

관련 문제