Заполнить список‹Объекты› из представления Mvc 3

У меня есть ViewModel на основе Nominees . И у меня может быть несколько номинантов для модели представления.

Я хочу заполнить Ilist из представления. Вот мои модели просмотра

public class DebitViewModel:IValidatableObject
{
    public string AgentName { get; set; }
    public Debit Debit { get; set; }

    public Policy Policy { get; set; }
    public PolicyType PolicyType { get; set; }
    public Customer Customer { get; set; }     

    public IList<PolicyType> PolicyTypes { get; set; }
    public List<Nominee> Nominees { get; set; }
    public Dictionary<int,string> OccupationTypes { get; set; }        
}

Я хочу автоматически заполнять все Nominess, когда я нажимаю «Отправить». так как мне создать представление и заставить его автоматически заполнять список автоматически? вместо отдельных объектов?


person Joy    schedule 21.03.2012    source источник


Ответы (2)


Вы можете использовать шаблоны редактора:

@model DebitViewModel
@using (Html.BeginForm())
{
    ... some input fields for the other properties that we are not interested in

    @Html.EditorFor(x => x.Nominees)

    <button type="submit">OK</button>
}

а затем вы определяете собственный шаблон редактора для модели Nominee (~/Views/Shared/EditorTemplates/Nominee.cshtml), который будет автоматически отображаться для каждого элемента коллекции Nominees:

@model Nominee

<div>
    @Html.EditorFor(x => x.FirstName)
    @Html.EditorFor(x => x.LastName)
    ...
</div>
person Darin Dimitrov    schedule 21.03.2012
comment
это не сработало, так как это список. список номинантов не может быть показан шаблоном редактора номинантов :( я пробовал, он не показывает поля шаблона. Где, как если бы я делал то же самое для одного номинанта. Он показывает все поля шаблона :) - person Joy; 21.03.2012
comment
@Joy, ты, вероятно, ошибся с названием своего пользовательского шаблона редактора. Имя и место очень важны. Он должен быть ~/Views/Shared/EditorTemplates/Nominee.cshtml и автоматически шаблон будет отображаться для каждого элемента коллекции. - person Darin Dimitrov; 21.03.2012
comment
Но я видел, что только один кандидат работает нормально. Я имею в виду, что @Html.EditorFor(x => x.Nominee) работает нормально. если бы имя и местоположение моего шаблона редактора были бы неправильными, то даже он не отобразил бы и одного кандидата :), но он работает нормально. Единственная проблема с public List<Nominee> Nominees :) - person Joy; 21.03.2012
comment
@Joy, ты должен использовать @Html.EditorFor(x => x.Nominees), а не @Html.EditorFor(x => x.Nominee). И если имя и местоположение вашего шаблона неверны, он отобразит кандидата. Просто он будет использовать шаблон по умолчанию, а не ваш собственный шаблон. - person Darin Dimitrov; 21.03.2012

скажем, например, Nominee выглядит как

public class Nominee{
 public int Id{get;set;}
 public string Name{get;set;}
 public int Age {get;set;}
}

вид будет выглядеть

@for (int i = 0; i < Model.Nominees.Count(); i++)
{ 
<tr>                                                           
  <td>@Html.TextBoxFor(m => m.Nominees[i].Name)</td>
  <td>@Html.TextBoxFor(m => m.Nominees[i].Age)</td>
</tr>
}

подробнее о привязке модели к списку

person Rafay    schedule 21.03.2012
comment
Да, я знаю, но мне нужно заполнить список в событии HttpPost. Будет ли он автоматически заполнять список Nominess? - person Joy; 21.03.2012