2011-03-23 1 views
4

사용자에 따라 동적 메뉴가 변경되는 asp.net MVC에서 새 웹 사이트를 시작할 예정입니다. 그러나 그것이 전부는 아닙니다. 사용자에 따라 2 가지 레이아웃 (면도기 레이아웃)을 사용하고 2 가지 레이아웃에는 다른 메뉴가 있습니다. 따라서 2 개의 다른 다이나믹 메뉴가있는 2 개의 레이아웃이 있습니다.Viewmodel 및 동적 메뉴 모범 사례 - ASP.NET MVC

보기 당 하나의보기 모델이있는 2 개의 레이아웃에 동일한보기를 사용하고 싶습니다. 액션 필터를 사용하여 레이아웃을 결정합니다. 모든 메뉴를 표시 할 때마다 데이터를 포함하는 "ViewModel"기본 클래스를 디자인하고 모든 기본 뷰 클래스 (뷰 당 하나의 뷰 모델)에 대해이 기본 클래스의 하위를 만드는 것이 좋습니다.

좋은 사례인지 알고 싶습니다. 두 개의 뷰 (레이아웃 당 하나)를 사용하고 공통 부분에 대한 부분 뷰를 사용해야하는 경우입니까?

레이아웃에 따라보기에 표시 할 내용에 약간의 차이가 있다면 하나 대신 2 개의보기를 사용해야합니까?

권장 사항은 무엇입니까?

답변

7

필자의 의견으로는 동적 뷰를 만드는 방법을 결정하는 객체를 포함하는 뷰의 뷰 모델을 만드는 것이 가장 좋습니다. 예 :

해당 사용자에 대해 렌더링 할 메뉴에 따라 동적 메뉴 데이터 구현을보기 모델에 할당합니다. 그런 다음보기에서 다음을 호출 할 수 있습니다.

@Html.DisplayFor(x => x.MenuData) 

동적 메뉴가 필요한 곳. 그런 다음 각 유형의 IDynamicMenuData 구현에 대한 표시 템플릿을 만들면 그에 따라 렌더링됩니다. 그런 다음 하나의보기, 하나의보기 모델 만 필요하며 동적 메뉴의 X 구현 수를 가질 수 있습니다.

0

if/else 로직을 사용한 단일 뷰 대 두 개의 뷰를 사용하면 코드를 재사용 할 수 있다고 생각합니다. 두 메뉴가 크게 다른 경우 두 가지보기를 만드는 것이 좋습니다. 메뉴가 몇 가지 메뉴 항목을 제외하고는 거의 동일하다면, if/else 로직과 함께 하나의 뷰를 사용할 것입니다.

2

매우 단단하기 때문에 메뉴 속성이있는 기본 뷰 모델을 사용하지 말 것을 강력히 권장합니다. (예를 들어, 부분 뷰를 사용하면 어떻게됩니까? AJAX 용 모델을 JSON으로 직렬화하려는 경우에는 무엇을해야합니까?베이스에서 상속하는 것을 잊어 버리면 상황이 더 좋아 지겠습니까?) 대신, 해당 모델에 대해 별도의 뷰 모델을 만드는 것이 좋습니다. 메뉴는 ViewData 컬렉션에 저장할 수 있습니다. 필터에서이 작업을 수행하십시오.

기본 모델을 사용하여 끝내려면 here이 좋은 예입니다.