绑定DropDownListFor在foreach中,ASP.NET MVC

时间:2015-08-09 10:10:04

标签: c# asp.net-mvc html.dropdownlistfor

这是我的代码:

ViewModel

public class FooViewModel{
   public Guid BarId { set;get }
}

查看:

@model IEnumerable<FooViewModel>
@foreach (var c in Model)
{
    <div>
        @Html.DropDownListFor(o => c.BarId , (List<SelectListItem>)ViewBag.BarCollection)
    </div>
}

问题是DropDownListFor完全创建选项,但绑定不起作用。

1 个答案:

答案 0 :(得分:2)

您无法使用foreach循环为集合中的项生成控件。如果您检查html,您将看到没有索引器的重复name属性(以及重复的id属性,这些属性是无效的html)。您需要for的自定义EditorTemplate循环FooViewModel。使用for循环(您的模型必须实现IList<T>

@model IList<FooViewModel>
for (int i = 0; i < Model.Count; i++)
{
  @Html.DropDownListFor(m => m[i].BarId, ....)
}

注意html现在是

<select name="[0].BarId" ..>
<select name="[1].BarId" ..>