UpdateModel не обновляет мою модель
У меня должно быть что-то неправильно настроено, так как я не могу получить функцию UpdateModel для корректного обновления моей модели на основе информации, передаваемой через FormCollection.
Мой взгляд выглядит так:
@model NSLM.Models.Person
@{
ViewBag.Title = "MVC Example";
}
<h2>My MVC Model</h2>
<fieldset>
<legend>Person</legend>
@using(@Html.BeginForm())
{
<p>ID: @Html.TextBox("ID", Model.ID)</p>
<p>Forename: @Html.TextBox("Forename", Model.Forename)</p>
<p>Surname: @Html.TextBox("Surname", Model.Surname)</p>
<input type="submit" value="Submit" />
}
</fieldset>
Моя модель:
namespace NSLM.Models
{
public class Person
{
public int ID;
public string Forename;
public string Surname;
}
}
и мой контроллер:
[HttpPost]
public ActionResult Details(FormCollection collection)
{
try
{
// TODO: Add update logic here
Models.Person m = new Models.Person();
// This doesn't work i.e. the model is not updated with the form values
TryUpdateModel(m);
// This does work
int.TryParse(Request.Form["ID"], out m.ID);
m.Forename = Request.Form["Forename"];
m.Surname = Request.Form["Surname"];
return View(m);
}
catch
{
return View();
}
}
как вы можете видеть, если я вручную назначаю каждое свойство, оно работает нормально, так что я не установил, чтобы модель обновлялась со значениями формы?
Спасибо,
отметка
3 ответа
Замените поля свойствами в вашей модели, а именно:
namespace NSLM.Models
{
public class Person
{
public int ID {get; set;}
public string Forename {get; set;}
public string Surname {get; set;}
}
}
К тому времени, когда вызов достигает метода действия, автоматическое связывание модели уже выполнено. Попробуйте изменить входной параметр вашего метода действия, чтобы принять экземпляр Person. В этом случае механизм связывания попытается создать экземпляр и заполнить его значениями, переданными вашей формой.
Попробуй это:
Посмотреть:
@model NSLM.Models.Person
@{
ViewBag.Title = "MVC Example";
}
<h2>My MVC Model</h2>
<fieldset>
<legend>Person</legend>
@using(@Html.BeginForm())
{
@Html.HiddenFor(model => model.ID)
<p>Forename: @Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</p>
<p>Surname: @Html.EditorFor(model => model.Surname)
@Html.ValidationMessageFor(model => model.Surname)
</p>
<input type="submit" value="Submit" />
}
</fieldset>
Контроллер:
[HttpPost]
public ActionResult Details(Person p)
{
if (ModelState.IsValid)
{
db.Entry(p).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(p);
}