DropDownListFor表现不如预期

时间:2013-06-04 23:57:28

标签: c# .net asp.net-mvc asp.net-mvc-4

在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 });

问题是未在下拉列表中选择正确的值

pls see screenshot here

而下拉列表应为Mobile,Office,Home

代码很香草,它是标准的html.DropdownListFor()帮助器,所以看起来它没有在标签上生成正确的选定属性!!

是什么给了什么?

1 个答案:

答案 0 :(得分:1)

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

使用类似的东西:

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

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