저는 뷰 모델을 두뇌로 감싸려고 노력하고 있습니다. 나는이 상황에서 무엇을해야하는지에 대한 설명을하고 싶습니다 :이 상황을위한 이상적인 (보기) 모델 디자인
모델 :
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
을 선택하는 사용자 수 있습니다 가정 해 봅시다 그가 님을 필터링하고 싶습니다. 또한 firstName
및 lastName
만 표시하고 싶습니다. 이것이 뷰 모델을 사용할 시간일까요? 이전에는 이런 식으로했을 것입니다.
뷰 모델은 :
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
을 통해 전달되는 구현을 보았지만 패드 연습처럼 보입니다. 미리 감사드립니다.
이것은 보인다 효율적인 방법. 더 효과적으로이 작업을 수행 할 수있는 다른 방법이 있는지 궁금합니다. 테이블의 고유 한 하위 집합을 보여주는 많은 페이지가 있다면 어떨까요? 각각 하나씩 VM이 필요합니까? – Jeff
이상적으로 그렇습니다. 그렇지 않으면 혼란스러워지기 시작합니다. – Max