2013-06-04 5 views
0

Получение некоторого странного поведения на dropdownlistfor(), но он использует список поэтому, возможно, я что-то неправильно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> 
    } 

где песни1 определяются в простом .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

тогда как выпадающие должна быть мобильной, офис, дом

Код довольно ванили, это стандарт html.DropdownListFor() хелпер так похоже, что это не создает правильный выбранный атрибут тега !!

Что дает?

ответ

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>, вы можете использовать «Значение» и «Текст».

+0

Или сделать это вручную - без причудливого списка ... –