我正在使用ASP.Net MVC 2並且無法使DropDownList正確綁定。MVC 2 DropDownList沒有選擇列表中的值
我使用強類型的ViewModel和HTML.DropDownListFor語句在我的視圖中創建下拉菜單。該聲明在'正常'場景中正常工作,我只是將DropDown綁定到ViewModel中的簡單字段。 當我的ViewModel包含多個對象的列表(數組)時,我想在這些對象的每個對象中綁定到一個(單獨的)DropDown時使用此方案。在這種情況下,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" />
<% } %>
對於文本框能正常工作(也如果我只是使用狀態的文本框,看到評論out位)。 DropDown是正確生成的,但未設置爲正確的值。如果我在DropDowns中選擇一個值並提交表單,則將正確的值放回到我的模型中。
我也嘗試把地址部分放在一個UserControl中,然後再渲染幾次。如果我使用Html.RenderPartial呈現UserControl,則在DropDOwn中設置正確的值,但在Postback中,我的模型未正確填充。如果使用EditorFor呈現UserControl,我得到的問題與上面的代碼一樣:DropDown沒有得到正確的初始值,但在Postback上,我得到了在我的模型中設置的選定值。
另一件事我想是使地址不是一個名單,但在我看來模型(屬性:地址1,地址,地址3),而不是硬編碼幾個IP地址,然後使用: <%= Html.DropDownListFor(人=>人。 Address1.State,Model.AvailableStates)%> 在這種情況下,DropDown會得到正確的值。顯然,我不想使用這種解決方法缺乏靈活性。
我在做什麼錯?我是MVC的新手,所以也許這是我的整個做法是錯誤的?
謝謝,這似乎工作正常。正如你所說:也許不像我所希望的那樣優雅,但絕對可以接受。 –
請注意,'dataValueField'參數是第二個,'dataTextField'參數是第三個,因此您可能需要切換「文本」和「值」。 –
這是哪裏記錄它不能從一個「複雜」lambda中提取「選定」的值? – Triynko