是否可以更新模型中的1个字段,而不将所有其他模型项目传递回控制器?
例如,如果我的模型有4个项目(id,firstname,lastname,address)
如果我的xxx.cshtml文件只有1个可编辑的firstname字段,我是否还需要包含all httpost中的4个项目?没有意义,如果我只想编辑1个字段,但我的记录包含可能包含模型中的许多(即16个)字段。
目前,我正在查询记录,只抓取2个字段,id和要显示和编辑的名字。保存时,它似乎没有保存。
感谢。
答案 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);
}
}