我有一个视图,其中有一个IEnumerable模型。我在foreach循环中使用DropDownListFor Html帮助器来输出下拉列表。但它不会将所选项目设置为true。代码如下:
@model IEnumerable<Example>
@foreach (var item in Model) {
@Html.DropDownListFor(modelItem => item.FilePath, (IEnumerable<SelectListItem>)ViewBag.ConfigFiles, string.Empty, null)
}
上面的代码输出一个Html选择元素。但即使item.FilePath与其中一个选项具有相同的值,也不会选择任何选项。
答案 0 :(得分:1)
这是在循环中使用DropDownListFor()
的一个不幸的限制,您需要在每次迭代中生成一个新的SelectList
。但是,使用foreach
循环生成表单控件将不起作用。因此,它创建与您的模型没有关系的重复name
属性将不会绑定,并且它还会生成重复的id
属性,这些属性是无效的html。
将模型更改为IList<T>
并使用for
循环,并使用设置SelectList
selectedValue
@model IList<Example>
....
@for(int i = 0; i < Model.Count; i++)
{
@Html.DropDownListFor(m => m[i].FilePath, new SelectList(ViewBag.ConfigFiles, "Value", "Text", Model[i].FilePath), string.Empty, null)
}
请注意,现在这会生成与您的模型绑定的name
属性
<select name="[0].FilePath">....<select>
<select name="[1].FilePath">....<select>
.... etc
请注意,无需在控制器中创建IEnumerable<SelectListItem>
。您可以将对象的集合分配给ViewBag
ViewBag.ConfigFiles = db.ConfigFiles;
并在视图中
new SelectList(ViewBag.ConfigFiles, "ID", "Name") // adjust 2nd and 3rd parameters to suit your property names