2009-03-25 2 views
5

MVC의 기본 사항을 놓치고 있습니까?하나의 MVC보기에 강력하게 형식화 된 모델 두 개 사용

도서 목록과 저자 목록을 표시하는보기가있는 경우 책 목록 및 작성자 목록을 속성으로 갖는 클래스를 만들어야합니다. 권리?

이 클래스를 사용하려면보기를 강력하게 입력해야합니다.

이제 동일한 목록으로 새 페이지를 만들고 싶지만 프로모션 목록도 있습니다. 도서 속성 목록, 저자 속성 목록 및 판촉 속성 목록이있는 다른 클래스를 만들어야합니까?

모든보기에 대한 수업을 만들면 많은 추가 작업이 필요합니다. 이 각각에 대해 강력한 형식의 부분을 작성해야합니까? 매번 레이아웃이 다른 경우 어떻게해야합니까?

현재 일부 일반 속성이 포함되어 있으므로 모든보기에서 사용되는 BaseViewData 클래스가 있습니다. 그러나 이제는 BaseViewData 클래스를 완전히 확장하지 않고도 다른 항목을 얻으려고 애 쓰고 있습니다.

모든 간단한 예제가 다루지 않는 이론에 대해 누군가 이해해 주시겠습니까?

답변

3

은 내가 사용하는 실제 오버 헤드가없는 ViewData extension methods 강하게 다중에 대한 지원을 추가하는 MvcContrib에서 유형이 다른 모델 인 경우). 그것들을 꺼내보기에

User currentUser = GetCurrentUser(); 
List<Project> projectList = projectRepository.GetRecentProjects(currentUser); 
ViewData.Add(user); 
ViewData.Add(projectList); 

코드는 다음과 같습니다 : 다음을 ViewData에 추가하는 코드는 다음과 같습니다

User user = ViewData.Get<User>(); 
List<Project> projectList = ViewData.Get<List<Project>>(); 

이것은 "마법 문자열"와 타입 캐스팅을 모두 제거합니다. 뷰의 Model 속성에는 아무런 변화가 없습니다.

+0

뷰에 변수를 입력해야합니까? 나는보기가 단지 코드를 보여 주기로되어 있다고 생각 했나? –

0

동일한 문제가 발생했습니다. 대부분의 사람들을위한 일반적인 솔루션은 정말로 원하는 Books 및 Authors 모델이 포함 된 컨테이너 클래스를 만들고 해당 컨테이너를보기로 전달하는 것입니다.

차선책, 그렇지만 작동합니다. 바라건대 이것은 프레임 워크의 차기 버전에서 다루어지기를 바란다.

1

적 시스템에 개체 및 모든보기에 사용하기위한 하나 개의 컨테이너 클래스를 생성 - null 값 간단한

객체는

관련 문제