Определенно работа для шаблона редактора.Таким образом, по вашему мнению, вы помещаете эту единственную строку:
@Html.EditorFor(x => x.Guests)
и внутри соответствующего шаблона редактора (~/Views/Shared/EditorTemplates/Guest.cshtml
)
@model AppName.Models.Guest
<div>
First Name:<br />
@Html.TextBoxFor(x => x.FirstName)
</div>
И это все.
Теперь из коробки будут работать следующие действия:
public ActionResult Index(int id)
{
SomeViewModel model = ...
return View(model);
}
[HttpPost]
public ActionResult Index(SomeViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
// TODO: do something with the model your got from the view
return RedirectToAction("Success");
}
Обратите внимание, что имя шаблона редактора важно.Если свойство в вашей модели представления:
public IEnumerable<Guest> Guests { get; set; }
, шаблон редактора должен называться Guest.cshtml
.Он будет автоматически вызываться для каждого элемента коллекции Guests
, и он позаботится о том, чтобы правильно генерировать идентификаторы и имена ваших входных данных, чтобы при повторном выполнении POST все работало автоматически.
Вывод: каждый раз, когда вы пишетецикл (for
или foreach
) в представлении ASP.NET MVC, вы должны знать, что вы делаете это неправильно и что есть лучший способ.