Я делал это несколько раз и использовал пост Фила Хаака в качестве руководства. В прошлый раз я понял, как заставить его работать с шаблонами редактора. Размещение этого здесь в надежде, что это поможет кому-то еще в будущем (или мне, если я когда-нибудь забуду).
Мой пример здесь использует адреса (для краткости используем только одно свойство).
AddressViewModel.cs
public class AddressViewModel
{
public string Address1 { get; set; }
}
AddressViewModels.cs
public class AddressViewModels : List<AddressViewModel>
{
}
PersonViewModel.cs
public class PersonViewModel
{
public AddressViewModels HomeAddresses { get; set; }
}
AddressViewModel.cshtml (шаблон редактора)
@model AddressViewModel
<div>
@Html.LabelFor(m => m.Address1)
@Html.TextBoxFor(m => m.Address1)
</div>
AddressViewModels.cshtml (шаблон редактора)
@model AddressViewModels
@for (var i = 0; i < Model.Count; i++)
{
@Html.Hidden("Index", i)
@Html.EditorFor(m => Model[i])
}
Person.cshtml
@model Person
<h3>Edit Addresses</h3>
@Html.EditorFor(m => m.HomeAddresses)
<button type="submit">Save</button>
Визуализированный HTML
<input id="HomeAddresses_Index" name="HomeAddresses.Index" type="hidden" value="0">
<label for="HomeAddresses_1__Address1">Address 1</label>
<input id="HomeAddresses_1__Address1" name="HomeAddresses[1].Address1" type="text" value="P.O.Box 123" >
<button type="submit">Save</button>