2011-02-23 96 views
2

在过去的几年中,我正在使用我的第5个左右的ASP.NET MVC webapp,而且我仍然没有看到一个好的方法来将编辑/当使用ORM(如Linq to SQL或Entity Framework)时,更新表单并将其高效保存到数据库。编辑的ASP.NET MVC3模型绑定

只要是明确的,问题是与创建行动,你可以把对象作为参数:

public ActionResult Create(QuestionGroup newGroup) 

随着编辑操作,对象必须链接到ORM和更新,而不是像ModelBinder一样从头开始创建。

我总是通过两种方法解决这个问题:要么手动更新对象上的每个属性(每个属性的一行代码),要么写一个使用反射的方法来查找每个属性以更新它,将该值复制过来。

我觉得一定,通过现在的MVC 3版本,还有就是做这个好祝福方式,但我不能找到它!更简单和优雅地做这件事的秘诀是什么?

+0

我知道这是一个老问题,但Automapper如何?它可以为您节省财产复制仪式 – Menahem 2011-12-25 15:16:30

回答

2

好吧,这是令人尴尬的......有一个方法Controller.UpdateModel有几个重载,将做的伎俩。我搜索了互联网嗨和低,只是发布问题后,无意中发现了智能感知的答案。

2

我发现你也可以使用Entity Framework来做以下事情。它与其他选项有利有弊,但它应该与以前的答案一样正常:

[HttpPost] 
public ActionResult Edit(QuestionGroup updatedGroup) 
{ 
    try 
    { 
     context.QuestionGroups.Attach(updatedGroup); 
     context.ObjectStateManager.ChangeObjectState(updatedGroup, System.Data.EntityState.Modified); 

     ValidateModel(updatedGroup); 

     if (this.ModelState.IsValid) 
     { 
      context.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
    } 
    catch 
    { 
    } 

    return View(); 
}