在dropdownlistfor()上获得一些奇怪的行为,但它正在使用列表,所以也许我出错了
代码很简单
@for (int i = 0; i < Model.Phones.Count; i++ )
{
<tr>
<td>@Html.TextBoxFor(m => m.Phones[i].Num)</td>
<td>@Html.DropDownListFor(m => m.Phones[i].Typ, list1 )</td>
</tr>
}
其中list1在.cshtml本身中定义为
string[] types = new string[] { "Office", "Mobile", "Home" };
List<SelectListItem> list1 = new List<SelectListItem>();
foreach(var t in types){
list1.Add(new SelectListItem{Text = t, Value = t });
问题是未在下拉列表中选择正确的值
而下拉列表应为Mobile,Office,Home
代码很香草,它是标准的html.DropdownListFor()帮助器,所以看起来它没有在标签上生成正确的选定属性!!
是什么给了什么?答案 0 :(得分:1)
问题是您的所有DropDownListFor
最终都使用相同的选项列表。选项列表本身包含所选选项。因此,当使用一个列表的选定选项更新列表时,所有先前的列表也会更新。
使用类似的东西:
@Html.DropDownListFor(m => m.Phones[i].Typ,
new SelectList(list1, "DataValueFieldName", "TextValueFieldName",
m => m.Phones[i].Typ)
这将为每个下拉列表生成一个新的唯一列表。将“DataValueFieldName”和“TextValueFieldName”替换为list1
中包含要尊重显示的值和文本的对象属性的名称。如果list1
为IEnumerable<SelectListItem>
,则您可以使用“值”和“文字”。