asp.net mvc 3 - 下拉列表生成"当前上下文中不存在名称'模型'"错误



刚开始使用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 " })

最新更新