2013-02-12 91 views
0

是否可以更新模型中的1个字段,而不将所有其他模型项目传递回控制器?MVC模型和更新db中的1个字段

例如,如果我的模型有4项(ID,名字,姓氏,地址)

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

目前,我正在查询记录,仅抓取2个字段,即id和名字以进行显示和编辑。当我保存时,它不会保存。

谢谢。

回答

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


} 
+0

是什么这个(TryUpdateModel(型号之间的区别,新的String [] { “Property1”, “Property2”}),只是(TryUpdateModel(型号))......他们都似乎工作,但我不明白为什么 – user1929393 2013-02-12 09:21:40

+0

前者是一个“白名单”,这意味着仅在第二个参数列表中提供的属性将被更新;后者将更新ModelBinder为其找到的所有属性匹配 – 2013-02-12 18:26:56

+0

好的,非常感谢,我注意到它不区分大小写......这肯定会使模型更好地工作。 – user1929393 2013-02-12 21:01:58

相关问题