Почему вы пытаетесь связать человека из запроса, используя следующее:
TryUpdateModel(person, formCollection.ToValueProvider());
, когда вы явно знаете, что в запросе такого нет?Эта строка вызывает связующее звено модели и пытается прочитать его из значений запроса.Но в вашей форме у вас есть только одно скрытое поле.Таким образом, ваше действие должно выглядеть так:
[HttpPost]
public ActionResult Edit([DeserializeAttribute]Person person)
{
// Do something with the person object that's passed as
// action argument
return View(person);
}
Также ваш сценарий выглядит странно.У вас есть представление, которое, похоже, строго типизировано для этого Person
объекта, в котором вы используете Html.EditorForModel
, что означает, что вы предлагаете пользователю возможность редактировать эти значения.Если вы сериализуете модель, вы получите старые значения в действии вашего контроллера.Этот атрибут полезен, только если вы хотите сохранить некоторую модель между несколькими запросами, но в форме нет соответствующих полей ввода, чтобы средство связывания модели по умолчанию могло восстановить экземпляр в действиях POST.