我已经使用 .net MVC 一两年了,这个问题在我的书中一直没有答案。让我演示一个非常简单的例子
人视图模型
public class PersonViewModel
{
public Person person { get; set; } //person is a db generated object
public SelectList jobtypes { get; set; } // drop down list for this view
}
个人控制器
public ActionResult Edit( int id )
{
PersonViewModel model = new PersonViewModel();
model.person = db.GetPerson(id); //get a person from the db
model.jobtypes = GetThemJobTypes();
return View(model);
}
现在的问题是我应该做以下哪一项?
[HttpPost]
public ActionResult Edit ( PersonViewModel model )
{
Person person = db.GetPerson(model.person.personid);
person.firstname = model.person.firstname;
person.lastname = model.person.lastname;
person.jobtypeid = model.person.jobtypeid;
person.save();
person.favoritetoy.name = model.person.favoritetoy.name;
person.favoritetoy.save();
}
或者
[HttpPost]
public ActionResult Edit (int id, FormCollection formValues)
{
Person person = db.GetPerson(id);
UpdateModel(person, "person");
person.save()
UpdateModel(person.favoritetoy, "favoritetoy");
person.favoritetoy.save()
}
似乎带有 updatemodel 的 formcollection 方法是网络各处的首选方法。我有点矛盾的是,我们已经有了一个包含我们想要的字段的 ViewModel,为什么还要再次使用 formcollection?许多人还指出在帖子中严格使用视图模型,但我还没有看到使用该方法更新数据库模型的好例子。
更新数据库对象的预期方式是什么?