ASP.NET MVC 在后方法期间更新数据库对象的正确方法是什么

本文关键字:方法 对象 数据库 是什么 更新 MVC NET ASP | 更新日期: 2023-09-27 18:31:52

我已经使用.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的表单收集方法是网络上任何地方的首选方法。我有点矛盾的是,我们已经有一个包含我们想要的字段的 ViewModel,为什么要再次使用表单集合?许多人还指出在帖子中严格使用 viewmodel,但我还没有看到使用这种方法更新数据库模型的好例子。

更新数据库对象的预期方法是什么?

ASP.NET MVC 在后方法期间更新数据库对象的正确方法是什么

真的没有打算的方法。与Ruby on Rails不同,ASP.Net MVC框架不会将您绑定到控制器和模型交互的任何特定模式中。就个人而言,我使用更接近第一个的东西,因为如果您犯了错误,它比运行时错误更有可能导致编译器错误。我建议将此代码移动到控制器方法以外的位置,因为它会迅速失控。