少なくとも 2 つのオプションがあります。
1.) リスト、配列、またはその他のコレクション タイプの都市をモデルに追加します。
2.) モデルに SelectList プロパティを追加する
オプション 1 は、文字列の配列のような単純なものにすることも、たとえばオブジェクトIEnumerable
の配列にすることもできCity
ます。次に、バインディングSelectListItem
の一部として、このプロパティをビュー内のオブジェクトのコレクションに変換する必要があります。DropDownList
オプション 2 には、 に直接バインドできるという利点がDropDownList
ありますが、アクション メソッド内でリストを作成する必要があります。
その後、最終結果は同じです。それは、SoCについてどれだけ詳しく知りたいかという問題です。
例 ( というプロパティを追加すると仮定Cities
):
@Html.DropDownListFor(m=>m.City, Model.Cities.Select(city => new SelectListItem()
{
Text = city,
Value = city,
Selected = city == Model.City
})
編集:
あなたのコメントに答えるには、いくつかの仮定をしなければなりません。というモデルがあると仮定しますEmployeeModel
。このモデルにCity
は、プレーンな文字列である というプロパティがあります。したがって、これはモデルの一部です。次のようになります。
public class EmployeeModel
{
public string City { get; set; }
// ... other properties ...
}
したがって、ドロップダウンにバインドするためのプロパティを追加する必要がある場合は、次のいずれかを実行します。
public class EmployeeModel
{
public string City { get; set; }
public IEnumerable<string> Cities { get; set; }
// ... other properties ...
}
また
public class EmployeeModel
{
public string City { get; set; }
public SelectList Cities { get; set; }
// ... other properties ...
}
この新しいプロパティには、ユーザーが選択できる都市のリストが含まれます。
最初のオプションを選択した場合は、データストアから IEnumerable を読み込み、ビューで上記の最初の例を使用します。これは、LINQ を使用してCities
プロパティ内の各文字列を新しいSelectListItem
オブジェクトに射影します。
2 番目のオプションを使用する場合はSelectList
、モデルをビューに渡す前にアクションで を作成します。IEnumerable
クラスは(都市のリスト) と "選択された値" を取得するコンストラクターを提供するため、これはそれほど難しくありません( http://msdn.microsoft.com/en-us/City
を参照) 。 library/dd460123%28v=vs.108%29.aspx )。コードは次のようになります。
model.Cities = new SelectList(GetCities(), model.City);
もちろん、これは、GetCities()
都市が保存されている場所からロードするためのヘルパー メソッド ( ) があることを前提としています。あなたのビューは次のようになります。
@Html.DropDownListFor(m=>m.City, model.Cities)
次に、ビュー エンジンはこれらの を使用して要素とその要素SelectListItem
を構築します。<select>
<option>