1

我已经使用 .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?许多人还指出在帖子中严格使用视图模型,但我还没有看到使用该方法更新数据库模型的好例子。

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

4

1 回答 1

3

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

于 2012-04-20T20:03:41.453 回答