0

在 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() 助手,所以看起来它没有在标签上生成正确的选定属性!

是什么赋予了 ?

4

1 回答 1

1

问题是您DropDownListFor最终都使用相同的选项列表。选项列表本身包含所选选项。因此,当使用一个列表的选定选项更新列表时,所有以前的列表也会更新。

改用这样的东西:

@Html.DropDownListFor(m => m.Phones[i].Typ, 
    new SelectList(list1, "DataValueFieldName", "TextValueFieldName", 
    m => m.Phones[i].Typ)

这将为每个下拉列表生成一个新的唯一列表。将“DataValueFieldName”和“TextValueFieldName”替换为list1包含要显示的值和文本的对象的属性名称。如果list1IEnumerable<SelectListItem>,那么您可以使用“值”和“文本”。

于 2013-06-05T00:07:42.340 回答