Asp.net mvc MVC模型和更新数据库中的1个字段

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

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

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

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

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


谢谢。

您想要的是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找到匹配的模型中的所有属性。好的,非常感谢。我注意到它不区分大小写…这肯定会使使用模型更好。