0

是否可以在不将所有其他模型项传回控制器的情况下更新模型中的 1 个字段?

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

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

目前,我正在查询一条记录,只获取 2 个字段,即 id 和 firstname 来显示和编辑。当我保存时,它似乎没有保存。

谢谢。

4

1 回答 1

2

您追求的是 TryUpdateModel。

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

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

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

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

例子:

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


}
于 2013-02-12T06:03:08.560 回答