У меня есть PersonEditorModel, который содержит список людей, которых я хочу представить в редакторе. У меня есть коллекция объектов Person, которая содержит коллекцию объектов Address. Я хочу визуализировать текстовые поля для всех них, чтобы пользователь мог редактировать имена и адреса, связанные с этими именами.
class PersonEditorModel
{
public List<Person> People;
}
class Person
{
public string Name;
public List<Address> Addresses;
}
class Address
{
public string Value;
}
Я создаю форму для редактирования адресов и имен, связанных с ними. Он использует Ajax.BeginForm, потому что это упрощенный пример, полученный из проблемы, с которой я столкнулся в более крупном приложении, где форма обновляет другую часть страницы, используя Ajax для получения результата.
В базовой форме cshtml:
@model Models.PersonEditorModel
@using (Ajax.BeginForm("Update", new AjaxOptions { HttpMethod = "Post" }))
{
<div>
@Html.EditorFor(x => x.People)
<button type="submit">Commit Changes</button>
</div>
}
Person.cshtml:
@model Models.Person
<div> @Html.TextBoxFor(x => x.Name) </div>
<div> @Html.EditorFor(x => x.Addresses) </div>
Address.cshtml:
@model Models.Address
<div> @Html.TextBoxFor(x => x.Value) </div>
Метод контроллера для действия:
public ActionResult Update(List<Person> people) { /* snip */ }
Когда я отправляю эту форму, точка останова, помещенная непосредственно в Update (), показывает, что «people» - это список правильной длины, но он не содержит абсолютно никаких данных - все адреса являются пустыми строками, даже если данные формы как появляется в Request.Form выглядит правильно.
Что может быть причиной такой проблемы и каков идиоматический способ MVC решить эту проблему?
ПРИМЕЧАНИЕ. Это упрощенный пример поведения, которое я наблюдаю в более сложном приложении. Я думаю, что я уловил суть проблемы здесь, но может быть какой-то другой неизвестный осложняющий фактор. Дайте мне знать, что может усложнить это, чтобы вызвать проблему, которую я вижу, и я постараюсь предоставить любую дополнительную информацию, которую я могу.
Я пытался заставить Update принять параметр PersonEditorModel вместо этого, но это вообще не дает никаких данных.