2015-08-09 5 views
-1

Вот мой код:Связывание DropDownListFor В Еогеасп, ASP.NET MVC

ViewModel

public class FooViewModel{ 
    public Guid BarId { set;get } 
} 

Вид:

@model IEnumerable<FooViewModel> 
@foreach (var c in Model) 
{ 
    <div> 
     @Html.DropDownListFor(o => c.BarId , (List<SelectListItem>)ViewBag.BarCollection) 
    </div> 
} 

проблема DropDownListFor создать параметры полностью, но связывание Безразлично» т работы.

ответ

2

Вы не можете использовать цикл foreach для создания элементов управления для элементов в коллекции. Если вы проверите html, вы увидите, что у вас есть дубликаты атрибутов name без индексаторов (а также дубликаты id атрибутов, которые являются недопустимыми html). Вам нужен цикл for пользовательского EditorTemplate для FooViewModel. Использование for цикла (модель должна реализовать IList<T>)

@model IList<FooViewModel> 
for (int i = 0; i < Model.Count; i++) 
{ 
    @Html.DropDownListFor(m => m[i].BarId, ....) 
} 

Обратите внимание на HTML теперь будет

<select name="[0].BarId" ..> 
<select name="[1].BarId" ..> 

и т.д.

+1

Side Примечание: Есть несколько других вопросов, с тем, что, если это в том числе вы редактируете существующие элементы, которые имеют значение «BarId», тогда первый параметр всегда будет выбран, когда вы будете отображать представление (хотя оно будет правильно возвращено). Но пока я не вижу ваш код контроллера, я могу показать вам правильный способ его исправления, но по существу вам нужно создать новый 'SelectList' на каждой итерации –