Asp.net mvc MVC模型和更新数据库中的1个字段
是否可以在不将所有其他模型项传回控制器的情况下更新模型中的1个字段 例如,如果我的模型有4项(id、firstname、lastname、address) 如果我的xxx.cshtml文件只有一个firstname可编辑字段,我是否还需要包括所有字段 httpost中有4个项目?如果我只想编辑一个字段,但我的记录中可能包含模型中的许多(即16个)字段,这是没有意义的 目前,我正在查询一条记录,只抓取两个字段,id和firstname来显示和编辑。当我保存时,它似乎不保存Asp.net mvc MVC模型和更新数据库中的1个字段,asp.net-mvc,asp.net-mvc-3,entity-framework,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,是否可以在不将所有其他模型项传回控制器的情况下更新模型中的1个字段 例如,如果我的模型有4项(id、firstname、lastname、address) 如果我的xxx.cshtml文件只有一个firstname可编辑字段,我是否还需要包括所有字段 httpost中有4个项目?如果我只想编辑一个字段,但我的记录中可能包含模型中的许多(即16个)字段,这是没有意义的 目前,我正在查询一条记录,只抓取两个字段,id和firstname来显示和编辑。当我保存时,它似乎不保存 谢谢。您想要的是TryU
谢谢。您想要的是TryUpdateModel 它只会更新ModelBinder找到表单值的属性 您可以使用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);
}
}
这个(TryUpdateModel(model,新字符串[]{“Property1”,“Property2”})和just(TryUpdateModel(model))之间有什么区别……它们似乎都能工作,但我不明白为什么。前者是一个“白名单”,这意味着只更新第二个参数列表中提供的属性。后者将更新ModelBinder找到匹配的模型中的所有属性。好的,非常感谢。我注意到它不区分大小写…这肯定会使使用模型更好。