하나의 MVC보기에 강력하게 입력 된 두 가지 모델을 사용합니다

StackOverflow https://stackoverflow.com/questions/683153

  •  22-08-2019
  •  | 
  •  

문제

나는 MVC의 교장들에게 근본적인 것을 놓치고 있습니까, 아니면 화를 내고 있습니까?

책 목록과 저자 목록을 표시하는 견해가 있다면 책 목록과 저자 목록을 속성으로 만드는 수업을 만들어야합니다. 오른쪽?

그런 다음이 클래스를 사용할 수 있도록보기를 강력하게 입력합니다.

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

모든 견해에 대한 수업을 만들고 있다면 많은 추가 작업을 지옥으로 만들고 있습니다. 이들 각각에 대해 강력한 유형의 부분을 만들어야합니까? 레이아웃이 매번 다른 경우 어떻게해야합니까?

현재 공통 속성이 포함되어 있으므로 모든 뷰에서 사용되는 BaseViewData 클래스가 있습니다. 그러나 나는 이제 BaseViewData 클래스를 완전히 부화시키지 않고 다른 항목을 얻는 데 어려움을 겪고 있습니다.

누군가가 모든 간단한 예제가 다루지 않는 이론을 이해하도록 도와 줄 수 있습니다.

도움이 되었습니까?

해결책

나는 그것을 사용한다 ViewData 확장 방법 ~에서 mvccontrib 이는 여러 유형의 모델에 대한 지원을 추가합니다 (다른 유형 인 한). ViewData에 추가하는 코드는 다음과 같습니다.

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

시야에서 코드를 잡아 당기는 코드는 다음과 같이 보입니다.

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

이것은 "마법 문자열"과 유형 주조를 모두 제거합니다. 이것은보기의 모델 속성으로 아무것도하지 않습니다.

다른 팁

시스템에서 Ever Object를 위해 하나의 컨테이너 클래스를 만들고 모든 뷰에 사용하십시오 - 간단합니다.

널 값을 가진 객체는 실제 오버 헤드가 없습니다

나는 같은 문제에 부딪쳤다. 대부분의 사람들을위한 일반적인 해결책은 당신이 정말로 원하는 책과 저자 모델이 포함 된 컨테이너 클래스를 만들고 그 컨테이너를 당신의 시야로 전달하는 것입니다.

차선책은 그렇습니다. 그러나 그것은 작동합니다. 바라건대 이것은 미래 버전의 프레임 워크에서 다룰 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top