2013-06-04 21 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中包含要尊重顯示的值和文本的對象的屬性名稱。如果list1IEnumerable<SelectListItem>,那麼您可以使用「值」和「文本」。

+0

或者手動做 - 沒有花哨的清單... –