刚开始使用MVC3,遇到了一个问题,试图在视图中建立一个下拉列表。ViewModel是用项目的SelectList填充的:
mdm.CaptionSetList=new SelectList(CaptionSet.Fetch(), "CaptionSetId", "Description")
然后在视图中使用:
@Html.DropDownListFor(model => model.Entity.CaptionSetId, model.CaptionSetList)
,但是当点击该页时,该行将用编译器消息高亮显示:
我犯的初学者的错误是什么?编译器错误消息:CS0103:名称'model'在当前上下文中不存在
DropDownListFor的第一个参数是一个函数,所以这部分是正确的,但第二部分只是期待一个SelectList,所以你需要做的就是
@Html.DropDownListFor(model => model.Entity.CaptionSetId, Model.CaptionSetList)
注意大小写
进一步澄清在强类型视图中,Model
是指向绑定到视图的模型的属性。由于第二个参数只是期望一个列表,并且您已经指定模型有一个名为CaptionSetList的属性,因此您将列表指定为Model.CaptionSetList
。如果你把列表放在ViewBag
中,你会把ViewBag.CaptionSetList
。
与第一个参数相比,第一个参数是一个函数,它接受一个与模型相同类型的参数
得到相同的错误。
在我的例子中,我做了一些搜索和替换,忘记更改lambda表达式:
@Html.DropDownListFor(m => model.StagingDelegate.ManagerId, new[]{
new SelectListItem() {Text = "ManagerId 1", Value = "1"},
new SelectListItem() {Text= "ManagerId 2", Value= "2"},
}, "Choose a Manager", new { @class = "form-control form-control-sm " })
将m =>替换为model =>:
@Html.DropDownListFor(model => model.StagingDelegate.ManagerId, new[]{
new SelectListItem() {Text = "ManagerId 1", Value = "1"},
new SelectListItem() {Text= "ManagerId 2", Value= "2"},
}, "Choose a Manager", new { @class = "form-control form-control-sm " })