Причина, по которой TryUpdateModel()
не обновляет состояние привязки вашей модели во втором действии Index
, заключается в том, что вы можете привязать экземпляр PersonModel
со значениями свойств firstname
и lastname
, по-прежнему установленными пустыми (или даже нулевое значение).
Вы можете использовать эту настройку, чтобы связать модель с TryUpdateModel
:
public async Task<ActionResult> Index([Bind(Include = "firstname, lastname")] PersonModel model)
{
if (TryUpdateModel(model))
{
// save changes with await
}
return View();
}
Или используя FormCollection
в качестве альтернативы:
public async Task<ActionResult> Index(FormCollection form)
{
var model = new PersonModel();
if (TryUpdateModel(model, string.Empty, new [] { "firstname", "lastname" }, null, form))
{
// save changes with await
}
return View();
}
Тем не менее, я думаю, что лучше настроить модель представления, которая включает в себя все необходимые свойства и привязана оттуда, поскольку TryUpdateModel()
метод имеет примечание по безопасности, на которое следует обратить внимание :
// Model
public class PersonViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
// Controller action
public async Task<ActionResult> Index(PersonViewModel model)
{
var data = new PersonModel();
data.FirstName = model.FirstName;
data.LastName = model.LastName;
// save changes with await
return View();
}
Смежные вопросы:
Как мне отредактировать значение FormCollection, а затем использовать TryUpdateModel с отредактированной коллекцией?
Когда и почему вы используете TryUpdateModel в asp.net mvc 2?
Использование TryUpdateModel для сохранения объекта в Edit Post с FormCollection