您追求的是 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);
}
}