Html.DropDownListFor - заполнение списка, соответствующего свойству модели, при перечислении по базовой модели?

Я пытался заполнить раскрывающийся список в представлении, что привело меня к:

ASP.NET MVC DropDownListFor с моделью типа List ‹string› < / а>

Решение работает хорошо. Итак, теперь у меня есть представление «Создать новый проект», в котором используется модель «Проект», и в моей модели, среди прочего, есть:

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

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

В моем результате действия GET я заполняю список сотрудников элементами из базы данных, и раскрывающийся список заполняется нормально.

Но теперь у меня есть представление, которое перечисляет мою модель (список всех проектов), и для каждого проекта мне нужно отображать раскрывающийся список, показывающий список сотрудников снова и снова.

В моем представлении «Показать все проекты» есть:

@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?)

Итак, похоже, что при перечислении модели маршрут отображения выпадающих списков, вероятно, немного отличается, есть ли помощь?


person Code Monkey    schedule 02.08.2012    source источник


Ответы (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.

person Sandrino Di Mattia    schedule 02.08.2012
comment
Вы заставили меня задуматься об «индексах», поэтому я смог решить свою проблему и без IList, спасибо! - person Code Monkey; 04.08.2012