在DropDownListFor中绑定选定值用于语句中的-in
问题描述:
我有一个允许同时编辑多个地址项的视图。文本框的绑定工作正常,但下拉列表不能识别所选值。在DropDownListFor中绑定选定值用于语句中的-in
我的ViewModels是:
public class AddressesViewModel
{
public List<AddressViewModel> Addresses { get; set; }
}
public class AddressViewModel
{
public string Street { get; set; }
public string StateSelected { get; set; }
public IEnumerable<SelectListItem> States { get; set; }
public AddressViewModel()
{
this.States = new List<SelectListItem> {
new SelectListItem(),
new SelectListItem { Text = "New Jersey", Value = "NJ"},
new SelectListItem { Text = "New York", Value = "NY"},
new SelectListItem { Text = "Pennsylvania", Value = "PA" },
new SelectListItem { Text = "Rhode Island", Value = "RI" }
};
}
}
我的控制器操作是:
public ActionResult Index()
{
var addressesViewModel = new AddressesViewModel();
addressesViewModel.Addresses = new List<AddressViewModel>() {
new AddressViewModel{
Street = "some road",
StateSelected = "PA"
},
new AddressViewModel{
Street = "some other road",
StateSelected = "NJ"
}
};
return View(addressesViewModel);
}
和我的观点是:
@model HelloWorld.Models.AddressesViewModel
@for (int i = 0; i < Model.Addresses.Count(); i++)
{
<div class="editor-label">
@Html.LabelFor(modelItem => Model.Addresses[i].Street)
</div>
<div class="editor-field">
@Html.EditorFor(modelItem => Model.Addresses[i].Street)
</div>
<div class="editor-label">
@Html.LabelFor(modelItem => Model.Addresses[i].StateSelected)
</div>
<div class="editor-field">
@Html.DropDownListFor(modelItem => Model.Addresses[i].StateSelected, Model.Addresses[i].States)
</div>
}
我测试使用单一项目视图(绑定到AddressViewModel),它工作正常。
答
随着从评论中的链接帮助下,我最终加入了每个到我的控制器:
public ActionResult Index()
{
var addressesViewModel = new AddressesViewModel();
addressesViewModel.Addresses = new List<AddressViewModel>() {
new AddressViewModel{
Street = "some road",
StateSelected = "PA"
},
new AddressViewModel{
Street = "some other road",
StateSelected = "NJ"
}
};
foreach (var item in addressesViewModel.Addresses)
{
if (item.StateSelected != null)
{
item.States.First(x => x.Value == item.StateSelected).Selected = true;
}
}
return View(addressesViewModel);
}
发现了一些其他有同样的问题:http://stackoverflow.com/questions/8669470/the-selected-item-does-not-display-when-i-use-dropdownlist http://stackoverflow.com/questions/2631397/dropdownlistfor-does-not-select-value-if-in-for-loop http ://stackoverflow.com/questions/17381635/dropdownlistfor-does-not-select-correct-value-in-a-loop – popdan 2014-08-29 13:37:22