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フィルタリングしたいを選択できるとしましょう。また、とだけを表示し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より良いビューモデルは何でしょうか?私の次の考えはすべてを作ること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

2つのビューモデルを実行します。1つはビュー用、もう1つはデータ用です。

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

さらに、People固有のデータの2番目のビューモデル:

public class PersonVM
{
  public string FirstName {set;get;}
  public string LastName {set;get;}
}
于 2012-12-12T21:46:13.587 に答える