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他想要过滤的内容。此外,我只想显示firstNameand 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但这似乎是垫练习。提前致谢。

4

1 回答 1

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;}
}
于 2012-12-12T21:46:13.587 回答