0

我试图在一个视图中填充一个下拉列表,这导致我:

具有 List<string> 类型模型的 ASP.NET MVC DropDownListFor

那里的解决方案效果很好。所以现在我有一个“创建新项目”视图,它接受一个“项目”模型,我的模型除其他外还有:

 public int projectPrimaryEmployeeID
    {
        get
        { return _projectPrimaryEmployeeID; }
        set
        {
            _projectPrimaryEmployeeID = value;
        }
    }

    public IEnumerable<SelectListItem> employeeList { get; set; }

在我的 GET 操作结果中,我使用数据库中的项目填充了employeeList,并且下拉列表填充得很好。

但是现在我有一个枚举我的模型(所有项目的列表)的视图,对于每个项目,我需要显示下拉列表,一遍又一遍地显示员工列表。

我的“显示所有项目”视图有:

@model IEnumerable<MVCCodeProject.Models.project>

..我说的是:

@Html.DropDownListFor(modelItem => item.projectPrimaryEmployeeID, new     SelectList(Model.employeeList, "Value", "Text"))

但我收到一个错误:

'System.Collections.Generic.IEnumerable<MVCCodeProject.Models.project>' does not contain a definition for 'employeeList' and no extension method 'employeeList' accepting a first argument of type 'System.Collections.Generic.IEnumerable<MVCCodeProject.Models.project>' could be found (are you missing a using directive or an assembly reference?)

所以似乎在枚举模型时,显示下拉列表的路径可能有点不同,有什么帮助吗?

4

1 回答 1

1

因此,首先您需要将模型更改为 IList:

@model IList<MVCCodeProject.Models.project>

然后您将能够迭代列表并使用索引绑定到该列表中的每个项目:

@for (int i = 0; i < Model.Count(); i++)
{
    Html.DropDownListFor(proj => proj[i], new SelectList(proj.employeeList, "Value", "Text"));
}

还有其他策略可以做到这一点,比如使用模板。在此处阅读更多信息:http: //haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

于 2012-08-02T22:36:52.377 回答