我在过去几年中正在开发我的第五个ASP.NET MVC webapp,我还没有看到一个很好的方法来获取在Edit / Update表单中提交的数据并将其保存到数据库中使用像Linq to SQL或Entity Framework这样的ORM时有效。
为了清楚起见,问题在于您可以将对象作为参数的创建操作:
public ActionResult Create(QuestionGroup newGroup)
使用“编辑”操作,对象必须链接到ORM并更新,而不是像ModelBinder那样从头开始创建。
我总是用以下两种方法解决这个问题:要么我会手动更新对象上的每个属性(每个属性一行代码),要么我会编写一个方法,使用反射来查找每个属性来更新它和副本价值超过。
我感觉某些,到目前为止,在MVC的第3版中,有一种祝福的方式可以做得更好,但我找不到它!更简单,更优雅地做到这一点的秘诀是什么?
答案 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();
}