我的索引页面如下所示:
情况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)
item是来自文件顶部定义的可枚举模型的端口模型。 item.Active是一个布尔值。不幸的是,DropDownListFor不起作用,布尔值设置不正确。但EditorFor确实有效。
在编辑窗口中,DropdownlistFor确实有效:case2:
@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}})
据我了解,不同之处在于,在 case1 中,lambda 表达式是一个闭包,其中 item.Active 存储在其中,而在 case2 中,模型在运行时(在 htmlhelper 中的某个位置)传递给 lambda 表达式。但是为什么会有区别呢?这无关紧要,因为在 case1 中,应该从表达式闭包中提取正确的值。既然它适用于EditorFor,为什么它不适用于DropDownListFor?