2013-02-12 27 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

相關問題