MVC模型并更新db中的1个字段

时间:2013-02-12 05:48:20

标签: asp.net-mvc asp.net-mvc-3 entity-framework

是否可以更新模型中的1个字段,而不将所有其他模型项目传递回控制器?

例如,如果我的模型有4个项目(id,firstname,lastname,address)

如果我的xxx.cshtml文件只有1个可编辑的firstname字段,我是否还需要包含all httpost中的4个项目?没有意义,如果我只想编辑1个字段,但我的记录包含可能包含模型中的许多(即16个)字段。

目前,我正在查询记录,只抓取2个字段,id和要显示和编辑的名字。保存时,它似乎没有保存。

感谢。

1 个答案:

答案 0 :(得分:2)

你的尝试是TryUpdateModel。

它只会更新ModelBinder找到表单值的属性。

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.tryupdatemodel(v=vs.108).aspx

您使用entityframework从数据库中获取模型,然后调用TryUpdateModel(您还可以选择传入要更新的属性白名单,这可以防止恶意用户通过添加表单值来更改模型中的其他属性)。 / p>

检查返回值以查看是否发生了验证错误。

示例:

[HttpPost]
public ActionResult Edit(int id, FormCollection form)
{
   var model=_db.Widgets.Find(id);

   //make sure that the model exists in our database
   if (model==null)
   {
      return HttpNotFoundResult();
   }


   if (TryUpdateModel(model,new string[] {"Property1","Property2"}))
   {
      _db.SaveChanges();
      return RedirectToAction("Index"); //or wherever you want to go
   }
   else  //TryUpdateModel returns false on a validation error
   {
      //return to the view and give the user a chance to fix the validation error(s)
      return View("Edit",model);
   }


}