Есть несколько способов сделать это.Что вас здесь привлекает, так это то, что для получения параметра results
значение name
для сгенерированных элементов управления для редактирования должно быть results[0]
для первого, results[1]
для второго и т. Д. Без пробелов в индексах(это из-за , как DefaultModelBinder
ожидает найти поля с именем при публикации формы).
Таким образом, одним из немедленных (хотя и не очень хороших) решений было бы указать имяправильно:
@Html.TextBox(string.Format("results[{0}]", i), res[i].text)
Гораздо лучшим решением было бы поместить results
в вашу модель (еще лучше, в ViewModel, созданной специально для этого представления).Например, сначала вы создаете класс, который инкапсулирует один фрагмент данных и соответствующий результат:
class ItemViewModel
{
Solution.Models.Data TheData { get; set; }
Solution.Models.Results TheResults { get; set; }
}
Затем вы создаете в своем представлении коллекцию этих элементов в качестве модели:
@model IEnumerable<ItemViewModel>
и затем выведите элемент управления для редактирования с помощью
Translation: @Html.EditorFor(modelItem => modelItem.TheResults)
Наконец, вы изменяете действие обратной передачи, чтобы принять массив ItemViewModel
:
[HttpPost]
public ActionResult Controller(ItemViewModel[] results)
General pieceСовет: Старайтесь избегать использования EditorFor
с объектами, которые не являются частью модели вашего представления (например, вещи, которые вы прошли через ViewBag
или ViewData
).Если вы сделаете это, MVC накажет вас.