2012-12-12 4 views
1

저는 뷰 모델을 두뇌로 감싸려고 노력하고 있습니다. 나는이 상황에서 무엇을해야하는지에 대한 설명을하고 싶습니다 :이 상황을위한 이상적인 (보기) 모델 디자인

모델 :

public class Person 
{ 
    public string firstName {set;get;} 
    public string lastName {set;get;} 
    public string City {set;get;} 
    .... other junk 
} 

컨트롤러 : 이제

IEnumerable<Person> model = db.Person 
.Where(r => r.City == city) 
.Select(r => new Person{ 
    firstName = r.firstName, 
    lastName = r.lastName, 
    something = r.something}); 

의 내 페이지에 city을 선택하는 사용자 수 있습니다 가정 해 봅시다 그가 님을 필터링하고 싶습니다. 또한 firstNamelastName 만 표시하고 싶습니다. 이것이 뷰 모델을 사용할 시간일까요? 이전에는 이런 식으로했을 것입니다.

뷰 모델은 :

public class PersonViewModel 
{ 
    public string firstName {set;get;} 
    public string lastName {set;get;} 
    public string cityChoice {set;get;} 
    public IEnumerable<SelectListItem> cityList {set;get;} 
} 

내 쿼리 유형 IEnumerable<Person>을 반환하기 때문에, 나는이 쿼리에 의해 반환 된 각 행에 대한 cityList이 것이 실현에 왔어요. 더 나은 뷰 모델은 무엇입니까?

public class PersonViewModel 
{ 
    public IEnumerable<string> firstName {set;get;} 
    public IEnumerable<string> lastName {set;get;} 
    public IEnumerable<string> cityChoice {set;get;} 
    public IEnumerable<SelectListItem> cityList {set;get;} 
} 

이 전혀 현명한 선택은 아닌 것 같아 : 내 다음 생각은 모두가 IEnumerable 확인하는 것입니다. 지저분 해 보일뿐 아니라 구현이 고통 스러울 수도 있습니다.

요약하면 List<SelectListItem>을 유지하면서 컨트롤러에서보기로 가장 적은 양의 데이터를 전달하는 가장 좋은 방법은 무엇입니까? 목록이 viewbag 또는 viewdata을 통해 전달되는 구현을 보았지만 패드 연습처럼 보입니다. 미리 감사드립니다.

나는 두 뷰 모델을 할 것

답변

0

- 뷰에 대한 하나의 데이터에 대한 하나

public class CitySelectionVM { 
    public string SelectedCity {set;get;} 
    public IEnumerable<SelectListItem> CityList {set;get;} 
    public IEnumerable<PersonVM> PersonList {set;get;} 
} 

는 또한 인민 특정 데이터에 대한 두 번째 뷰 모델 :

public class PersonVM 
{ 
    public string FirstName {set;get;} 
    public string LastName {set;get;} 
} 
+0

이것은 보인다 효율적인 방법. 더 효과적으로이 작업을 수행 할 수있는 다른 방법이 있는지 궁금합니다. 테이블의 고유 한 하위 집합을 보여주는 많은 페이지가 있다면 어떨까요? 각각 하나씩 VM이 필요합니까? – Jeff

+0

이상적으로 그렇습니다. 그렇지 않으면 혼란스러워지기 시작합니다. – Max