ASP.Net MVC 2を使用していて、DropDownListを適切にバインドするのに問題があります。MVC 2 DropDownListがリストの場合に値を選択しない
強く型付けされたViewModelとHTML.DropDownListForステートメントを使用して、自分のビューにドロップダウンを作成しています。このステートメントは、ViewModelの単純なフィールドにDropDownをバインドする「通常の」シナリオでうまく動作します。 ViewModelに複数のオブジェクトのList(配列)が含まれていて、これらのオブジェクトのそれぞれのフィールドを(個別の)DropDownにバインドする場合、このシナリオを使用する際に問題があります。その場合、DropDownは正しい初期値を取得しません。
例えば、複数の住所を持つことができる人がいる場合。各住所は、ストリート、市、州で構成されています。状態をドロップダウンとして表示したい。 私のモデルは次のとおりです。
public class PersonModel : CommonViewModel
{
public IList<SelectListItem> AvailableStates { get; set; }
public string Name { get; set; }
public IList<AddressModel> Addresses { get; set; }
public PersonModel()
{
AvailableStates = GenerateStates();
}
private IList<SelectListItem> GenerateStates()
{
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem() { Text = "WA", Value = "WA" });
items.Add(new SelectListItem() { Text = "NY", Value = "NY" });
items.Add(new SelectListItem() { Text = "IH", Value = "IH" });
items.Add(new SelectListItem() { Text = "FL", Value = "FL" });
items.Add(new SelectListItem() { Text = "CA", Value = "CA" });
return items;
}
}
public class AddressModel
{
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
}
は今、私の見解で、私のようなものを使用したい:私は国家のためのテキストボックスを使用している場合、これはまた、(正常に動作テキストボックスについて
<% using (Html.BeginForm("SubmitPersonDetails", "Home", new { actionMode = "Person"}, FormMethod.Post, new { id = "SubmitPersonForm" }))
{%>
<div class="formrow longinput">
<%= Html.LabelFor(person => person.Name)%>
<%= Html.TextBoxFor(person => person.Name)%>
</div>
<h4>Addresses</h4>
<% for (int i = 0; i < Model.Addresses.Count; i++) { %>
<div class="formrow">
<%= Html.TextBoxFor(person => person.Addresses[i].Street)%>
<%= Html.TextBoxFor(person => person.Addresses[i].City)%>
<%--<%= Html.TextBoxFor(person => person.Addresses[i].State)%>--%>
<%= Html.DropDownListFor(person => person.Addresses[i].State, Model.AvailableStates) %>
</div>
<% } %>
<input class="button primary" type="submit" value="Submit" name="Submit" />
<% } %>
を、コメントを参照してくださいアウトビット)。 DropDownは正しく生成されますが、正しい値には設定されません。 DropDownsで値を選択してフォームを送信すると、正しい値がモデルに戻されます。
また、UserControlにAddress部分を入れてみましたが、これは複数回レンダリングされました。 Html.RenderPartialを使用してUserControlをレンダリングすると、DropDOwnに正しい値が設定されますが、Postbackにモデルに正しく設定されていません。 EditorForを使用してUserControlをレンダリングすると、上のコードと同じ問題が発生します。ドロップダウンの正しい初期値は取得できませんが、Postbackでは選択した値がモデルに設定されます。私が試した
もう一つは、アドレスではないリストを作成する代わりに、私のビューモデルに(プロパティ:アドレス1、アドレス2、アドレス3)複数のアドレスをハードコーディングされた当時と使用: <% = Html.DropDownListFor(人=>人を。 Address1.State、Model.AvailableStates)%> この場合、DropDownは正しい値を取得します。明らかに、私は柔軟性の欠如に対してこの回避策を使用したくありません。
私は間違っていますか?私はMVCに慣れていないので、多分私の全体的なアプローチが間違っていますか?
ありがとう、これはうまくいくようです。あなたが言っているように、私が期待していたほどエレガントではないかもしれないが、確かに受け入れられる。 –
'dataValueField'パラメータは2番目で、' dataTextField'パラメータが3番目であるため、 "Text"と "Value"を切り替えることができます。 –
「複雑な」ラムダから「選択された」値を抽出できないことがこれにはどこに記載されていますか? – Triynko