所以我有一個包含項目列表的表單,每個項目都有一個選擇列表。我的代碼是像這樣(除去多餘的物品):MVC4 Html.DropDownListFor在循環中未設置選定的選項
@for(var i = 0; i < Model.InputSlots.Count; i++)
{
@Html.DropDownListFor(model => model.InputSlots[i].VariableId,
new SelectList(Model.Variables, "VariableId", "Name"),
"--Select Variable--",
new { @class = "span8" })
}
的下拉列表中顯示正確,如果我選擇的項目之一,併發布形式,選擇崗位正常,但是當我加載頁面將VariableId設置爲有效選項時,它不顯示選定的選項,而是顯示默認的「--Select Variable--」。
我在我的代碼中的許多其他地方使用DropDownListFor,它的工作方式與預期的一樣,只是在這種情況下不起作用。我可以告訴的唯一區別是它引用了一個數組項的屬性。
我在視圖中設置了一個斷點來驗證Model.InputSlots [i] .VariableId設置爲有效選項(2),並且我還查看了生成的HTML以確保有一個選項值爲2,兩者似乎都是正確的,但是在選項元素上沒有「選擇」,其值爲2.
這是一個已知的行爲,還是我只是在某些地方做錯了某些事情,我沒有注意到了嗎?
更新:
在選擇列表的構造函數設置所選的項目做的工作,即:
@Html.DropDownListFor(model => model.InputSlots[i].VariableId,
new SelectList(Model.Variables, "VariableId", "Name", Model.InputSlots[i].VariableId),
"--Select Variable--",
new { @class = "span8" })
但它似乎並不想從表達式得到它,因爲它在其他不案例。
參見例如HTTP://計算器。com/questions/17691742以及與之相關的五個問題中的任何一個(它們都是同一事物的變體)。 – JimmiTh
這些鏈接確實提醒我在SelectList的構造函數中存在一個參數來設置選定的項目,該項目確實有效,但他們並沒有真正解決爲什麼它不能從我的lambda中獲取它的問題。我的理解是DropDownListFor真的應該忽略這個參數,除非它不能從表達式中找出它。 – Gerald
對,錯誤的問題......這裏的問題是,所有的幫助者都使用lambda來將它翻譯成字符串表示法,它用來查找'ModelState'或'ViewData'中的值。換句話說,到那時它實際上不知道'i'具有什麼值,所以它找不到'Model.InputSlots [i]'的值。 – JimmiTh