在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),它工作正常。

+0

发现了一些其他有同样的问题:http://*.com/questions/8669470/the-selected-item-does-not-display-when-i-use-dropdownlist http://*.com/questions/2631397/dropdownlistfor-does-not-select-value-if-in-for-loop http ://*.com/questions/17381635/dropdownlistfor-does-not-select-correct-value-in-a-loop – popdan 2014-08-29 13:37:22

随着从评论中的链接帮助下,我最终加入了每个到我的控制器:

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); 
}