컨트롤러 PlayerController
과 동작이 내부에 있습니다 : View
, Info
, List
. URL에서 "/ Player/View"결과가 기본 레이아웃으로 표시됩니다.URL에 따라 컨트롤러의 레이아웃을 변경하십시오.
"/ 외부 /보기"요청에 따라 다른 레이아웃으로 결과를 얻고 싶습니다.
어떻게하면됩니까?
컨트롤러 PlayerController
과 동작이 내부에 있습니다 : View
, Info
, List
. URL에서 "/ Player/View"결과가 기본 레이아웃으로 표시됩니다.URL에 따라 컨트롤러의 레이아웃을 변경하십시오.
"/ 외부 /보기"요청에 따라 다른 레이아웃으로 결과를 얻고 싶습니다.
어떻게하면됩니까?
, 내 의견으로는이 컨트롤러는 단지 너무 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에 대한 응답으로 렌더링되는 모든보기가이 새로운 레이아웃을 사용합니다. 그렇지 않으면 '보통'보기가 사용됩니다.
또 다른 접근법은 라우팅 테이블을 사용하여 여기에 사용할 수있는 경로 값을 추가하여 레이아웃을 결정하는 것입니다. 그러나 나는이 접근법을 단순하게 유지하기 위해 갔다.
'ExternalController'컨트롤러 동작 내에서보기를 반환 할 때 사용할 레이아웃을 지정할 수 있습니다. 다른 답변에서 제안 된대로 컨트롤러에서 레이아웃을 재정의 할 수 있지만
는return View("View", "~/Views/Shared/_AnotherLayout.cshtml")
감사합니다. 내 하루 안전 : D –
"/ External/View"에 대해 동일한 PlayerController를 사용할 것입니다. 그래서 어떻게 든 라우팅을 지정해야합니까? –
@ NikitaMartyanov - 동일한 컨트롤러를 다시 사용하기 때문에 약간의 대답이 변경되었지만 원래 솔루션은 다른 컨트롤러에 적합하지만 다른 URL에 대한 뷰와 컨트롤러를 재사용 할 때는 적합하지 않습니다. –
감사합니다, Andras -이 접근법을 사용했습니다 (또한 "Exteranal/View"가 'PlayerController'에 매핑되도록 경로를 추가했습니다. –