2013-04-14 69 views
0

預選電流值必須使用Razor視圖引擎一個MVC 4項目,並發現了一些奇怪的事情:
我的代碼視圖中的以下行:Html.DropDownListFor不循環

@Html.DropDownListFor(model => model.TypA.Enum, Html.GetEnumList()) 

這工作得很好(Html.GetEnumList()返回List<SelectListItem>包含有效的項目),但現在我有我的顯示一個TypeA列表/編輯在for循環:

@for(int i = 0; i < Model.ListOfA.Count; ++i) 
{ 
    @Html.DropDownListFor(model => model.ListOfA[i].Enum, Html.GetEnumList()) 
} 

在這種情況下,如果我編輯現有的項目,當前值不會在下拉菜單中選擇,如第一種情況。如果手動更改值並將其發回服務器,則會在列表中的每個對象中設置正確的值。

有誰知道爲什麼預選在這裏不起作用嗎?

現在我做了一個解決方法通過提供電流值的GetEnumList(model.ListOfA[i].Enum),然後Selected屬性設置爲true在根據SelectListItem,但我覺得,因爲它工作在第一種情況下不應該是必要的...

+0

你可以請包括生成SelectListItem列表的代碼嗎?另外,你看到的行爲是什麼?所有選定的值是否與第一個選定的選項相匹配 –

+0

您是否設置了斷點並確認ListOfA數組設置正確? –

+0

你的列表中有默認選項嗎? –

回答

0

過去發生在我身上,我在ViewBag中填充選項,當我確定將默認選項設置爲selected = true時,這消失了。

var customers = new List<SelectListItem> { 
     new SelectListItem 
     { 
      Selected = true, 
      Text = "Select one", 
      Value = "" 
     } 
}; 
customers.AddRange(otherCustomers); 
ViewBag.Customers = customers; 
0

我無法解釋爲什麼它沒有綁定正確的值,但快速測試顯示它也發生在我身上。作爲一個解決方案,你可以刪除的循環和使用模板:

@Html.EditorFor(m => m.ListOfA) 

然後添加一個名爲TypeA.cshtml的局部視圖,像這樣:

@model TypeA 

@Html.DropDownListFor(model => model.Enum, Html.GetEnumList()) 

這應該正確綁定。