"CountryId"(int)と "Description"(string)の2つのプロパティを持つ(匿名型から)SelectListを使用して、DropDownListを作成しました。リストの選択した国をdefaultCountryにします。DropDownList SelectedValueが適切にバインドされていません
ここで、 "countries"はLinqクエリの匿名型のIQueryableです。
public class CountryBaseViewModel
{
public SelectList Countries { get; set; }
public Contact Contact { get;set; }
....
}
HTMLは次のようになります:
<p>
<label for="CountryId">Home Country:</label>
<%= Html.DropDownList("CountryId", Model.Countries)%>
</p>
これは素晴らしいですし、私はページをロードする際、正しい国が選択されている国は、ビューモデルのパブリックプロパティです。
しかし、コントローラのEditメソッドに変更を送信すると、バインドが失敗するようです。私は、次のHTML
<p>
<label for="Contact.Job">Job/Post:</label>
<%= Html.TextBox("Contact.Job", Model.Contact.Job) %>
</p>
を使用して、私は、コントローラ上の
public ActionResult Create(Contact contact)
メソッドを呼び出したときに例えば
は、その後、contact.Job値が正しくテキストボックスからで満たされているが、 CountryIdはそうではありません。
私はMVCがこれを設定するために "Contact.Job"(TextBox 1st)パラメータを使用すると仮定します。しかし、DropDownListの最初のパラメータは "Contact.CountryId"ではなく "CountryId"です。これが選択されている場合、選択した値はロード時にリストに表示されないためです。
TextBoxの最初のパラメータはデータバインディング用で、DropDownListの最初のパラメータは選択したアイテムを検索するようです。
このデータバインディングのスタイルを使用して、DropDownListで必要な値を選択し、それをModel.Contact.Countryに関連付けますか?