2013-05-22 9 views
0

현재 레이아웃에는의 false가 정의되어 있고 두 개를 제외한 모든보기에는 동일한 호출이있는 섹션이 있습니다. RenderPartial (" ShowLatestNews ")mvc4의 모든 페이지에 사이드 바를 표시하는 방법 2

더 좋은 방법이 있습니까? 즉 DRY 원칙을 따르십시오. 한 곳에서 정의하고 숨기거나 2 개의보기에서만 사용하지 마십시오.

UPDATE - 현재 레이아웃이 동적으로 사용자 에 따라 dbconfig에서 선택되는

이상적으로 우리는이 지금 가장 설득력

+0

섹션과 부분이 있으십니까? 'RenderPartial'을 사용하는 이유는 개별 뷰가 부분적으로 또는 부분적으로 원하는지를 지시 할 수 있도록 컴포넌트 화하는 것입니다. 또 다른 옵션은 사이트의 나머지 부분이 그런 식으로 설계되는 경우 여러 레이아웃을 사용하는 것입니다. –

+0

@Nate가 질문을 업데이트했습니다. 그렇기 때문에 전문가의 도움을 받아야하기 때문에 매우 간단합니다. – Kumar

+0

개인적으로 저는이 방법이 잘못된 방식으로 접근하고 있다고 생각합니다. (오해하지 않는 한) 나는 컨트롤러가 계속해서 (사용자 지정 데이터) -보기 자체가 아니라보기에 내가 포함하고있는 것을 결정할 유일한 시간은 스타일링 또는 GUI를위한 것입니다. 나는 나중에 바쁜 atm 대답을 게시 할 것입니다. –

답변

0

수 있습니다 말의 컨트롤러와 액션 조합에 따라 레이아웃을 전환하지 않으 솔루션이지만 간단합니다. 레이아웃 페이지에서 당신의 부분이 코드를 사용

ViewBag.HideSection = true; 

그것은 단지의 부분을 숨길 수 :

@if (ViewBag.HideSection == null) 
{ 
    @Html.RenderPartial("ShowLatestNews") 
} 

지금 2 개 컨트롤러 행동이 추가 렌더링 할 부분을 원하지 않는다 ViewBag에 뭔가를 지정하는 장소. 진실 또는 거짓, 단지 재산의 존재 여부를 평가하는 것이 아닙니다.

1

이 질문이 열리는 방향은 실제로 엄청납니다. 많은 경로는 현재 디자인에 의해 결정됩니다.

다른 절단 및 붙여 넣기하는 동안 솔루션


당신이 웹 사이트에 대한 마스터 레이아웃에서 완전히 다른 두 페이지를 가지고 있지만, 서로 (예 : 관리 페이지) 유사하다는 것을 현재 말할 수 있습니다 또는 다른 'forseeable'페이지에 대해 동일한 레이아웃을 가질 수있는 페이지

@{ 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
} 

페이지

정기적 페이지

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

관리자하지만 지금 당신이 말할 수 있습니다 : 각자의 용도에 각 레이아웃을 다양 화 - 그럼 나는이 페이지 레이아웃을 변경하는 것이 좋습니다/나는 /이 페이지가 메인 레이아웃과 별개이지만 약간의 정보 (예 : admin, VIP 탭)를 기반으로 조금씩 다를 필요가 있습니다. 이상하게 생각이 조금 이상해지기 때문에 컨트롤러를 결정할 것 View는 이미이 정보를 가지고 있습니다 ... 데이터는 ViewModel이나 ViewBag 또는 Session 데이터에 이상적으로 포함될 수 있습니다 - 다시 달라집니다.

By User - HTTP Context (잘라 내기 & 붙여 넣기 솔루션 ...)

<div id="specific-content"> 
    @if (User.Identity.IsAuthenticated && User.IsInRole("admin")) <!--RoleProvider--> 
    { 
     <div>My Admin Content!</div> 
     <!--In your case render something (or not)!--> 
     @{ Html.RenderPartial(...); } 
    } 
    else 
    { 
     <div>I'm not special :(</div> 
    } 
</div> 

또는 대신 레이아웃이나 페이지에서 위의 코드를 넣는는 Partial

또한 그들의 것은 하나의 내가 생각 것을 더에 직접 넣어 그 페이지의 경우로 리디렉션하는 것입니다 사용자는 특정 사람입니다. 저는 레이아웃을 고수하고 큰 팬이 아닙니다. User 보기에서.

이것은 내가 염두에 두었던 더 간단한 아이디어입니다.

관련 문제