我正在尝试将我的大脑围绕视图模型以及何时适合使用它们。我想解释一下在这种情况下该怎么做:
模型:
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
and 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;}
}
我已经意识到,由于我的查询将返回一个 type IEnumerable<Person>
,那么对于查询返回的每一行我都会有一个cityList
。更好的视图模型是什么?我的下一个想法是让一切都成为IEnumerable
:
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;}
}
这似乎根本不是一个明智的选择。它只是看起来很乱,实现也看起来很痛苦。
简而言之,将最少的数据从控制器传递到视图的最佳方法是List<SelectListItem>
什么?我已经看到了通过viewbag
或传递列表的实现,viewdata
但这似乎是垫练习。提前致谢。