编辑时的ASP.NET MVC3模型绑定

时间:2011-02-23 17:34:51

标签: asp.net-mvc asp.net-mvc-3 model-binding

我在过去几年中正在开发我的第五个ASP.NET MVC webapp,我还没有看到一个很好的方法来获取在Edit / Update表单中提交的数据并将其保存到数据库中使用像Linq to SQL或Entity Framework这样的ORM时有效。

为了清楚起见,问题在于您可以将对象作为参数的创建操作:

public ActionResult Create(QuestionGroup newGroup)

使用“编辑”操作,对象必须链接到ORM并更新,而不是像ModelBinder那样从头开始创建。

我总是用以下两种方法解决这个问题:要么我会手动更新对象上的每个属性(每个属性一行代码),要么我会编写一个方法,使用反射来查找每个属性来更新它和副本价值超过。

我感觉某些,到目前为止,在MVC的第3版中,有一种祝福的方式可以做得更好,但我找不到它!更简单,更优雅地做到这一点的秘诀是什么?

2 个答案:

答案 0 :(得分:2)

这很令人尴尬......有一个方法Controller.UpdateModel有几个重载可以解决这个问题。我在网上搜索得很高,只是在发布问题后才意外地找到智能感知的答案。

答案 1 :(得分:2)

我发现您还可以使用实体框架执行以下操作。它有其他选择的优点和缺点,但它应该像以前的答案一样有效:

[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();
}