我的索引頁看起來是這樣的:DropDownListFor使用不帶參數(關閉)拉姆達時選擇錯誤的值
案例1:
@model IEnumerable<MyStats.Models.Port>
...
<!-- does not work -->
@Html.DropDownListFor(modelItem => item.Active,new List<SelectListItem>(){ new SelectListItem(){ Text = "True", Value=bool.TrueString}, new SelectListItem(){ Text = "False", Value=bool.FalseString}});
<!-- does work -->
@Html.EditorFor(modelItem => item.Active)
項目是從定義枚舉MODELE一個端口型號在文件的頂部。 item.Active是一個布爾值。 不幸的是,DropDownListFor不起作用,布爾值沒有設置正確。 但EditorFor確實有效。
並在編輯窗口中,DropdownlistFor做工作: 案例2:
@model MyStats.Models.Port
...
@Html.DropDownListFor(model => model.Active,new List<SelectListItem>(){ new SelectListItem(){ Text = "True", Value=bool.TrueString}, new SelectListItem(){ Text = "False", Value=bool.FalseString}})
據我瞭解,所不同的是,在案例1 lambda表達式是一個封閉,其中item.Active存儲在裏面,在case2中,模型在運行時(在htmlhelper中的某處)傳遞給lambda表達式。 但爲什麼會有差異?它不應該因爲在case1中應該從表達式閉包中提取正確的值。 並且因爲它與EditorFor,爲什麼它不起作用DropDownListFor?
謝謝。 但modelItem => item.Active是正確的。這是參數無關緊要的lambda表達式。 其實這是自動創建的代碼。當使用asp.net mvc時。 你也可以寫「bla => item.Active」,它仍然可以工作。 bla被忽略。只有「item.Active」很重要。 「item」是範圍內的一個對象,它與lambda expr一起存儲。不知何故。在這種情況下,lambda表達式被稱爲閉包。 這就是案件之間的差異。 在case2中它是「model => model.Active」,html helper將使用原始模型在運行時從它獲取活動值。 – DanielG