ASP.NET MVC DropDownListFor 没有将列表中的选定数据设置为 true
ASP.NET MVC DropDownListFor doesn't set selected data to true in List
我有一个视图,它有一个 IEnumerable 模型。我在 foreach 循环中使用 DropDownListFor Html 助手来输出下拉列表。但它不会将 selected 项设置为 true。代码如下:
@model IEnumerable<Example>
@foreach (var item in Model) {
@Html.DropDownListFor(modelItem => item.FilePath, (IEnumerable<SelectListItem>)ViewBag.ConfigFiles, string.Empty, null)
}
以上代码输出一个Htmlselect元素。但是 none 个选项被 select 编辑,即使 item.FilePath 与其中一个选项具有相同的值。
这是在循环中使用 DropDownListFor()
的不幸限制,您需要在每次迭代中生成一个新的 SelectList
。但是,您使用 foreach
循环生成表单控件将不起作用。它创建与您的模型无关的重复 name
属性因此不会绑定,并且它还会生成重复的 id
无效属性 html.
将模型更改为 IList<T>
并使用 for
循环并在每次迭代中使用设置 selectedValue
[=26= 的构造函数生成新的 SelectList
]
@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
我有一个视图,它有一个 IEnumerable 模型。我在 foreach 循环中使用 DropDownListFor Html 助手来输出下拉列表。但它不会将 selected 项设置为 true。代码如下:
@model IEnumerable<Example>
@foreach (var item in Model) {
@Html.DropDownListFor(modelItem => item.FilePath, (IEnumerable<SelectListItem>)ViewBag.ConfigFiles, string.Empty, null)
}
以上代码输出一个Htmlselect元素。但是 none 个选项被 select 编辑,即使 item.FilePath 与其中一个选项具有相同的值。
这是在循环中使用 DropDownListFor()
的不幸限制,您需要在每次迭代中生成一个新的 SelectList
。但是,您使用 foreach
循环生成表单控件将不起作用。它创建与您的模型无关的重复 name
属性因此不会绑定,并且它还会生成重复的 id
无效属性 html.
将模型更改为 IList<T>
并使用 for
循环并在每次迭代中使用设置 selectedValue
[=26= 的构造函数生成新的 SelectList
]
@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