2011-02-23 91 views
2

在過去的幾年中,我正在使用我的第5個左右的ASP.NET MVC webapp,而且我仍然沒有看到一個好的方法來將編輯/當使用ORM(如Linq to SQL或Entity Framework)時,更新表單並將其高效保存到數據庫。編輯的ASP.NET MVC3模型綁定

只要是明確的,問題是與創建行動,你可以把對象作爲參數:

public ActionResult Create(QuestionGroup newGroup) 

隨着編輯操作,對象必須鏈接到ORM和更新,而不是像ModelBinder一樣從頭開始創建。

我總是通過兩種方法解決這個問題:要麼手動更新對象上的每個屬性(每個屬性的一行代碼),要麼寫一個使用反射的方法來查找每個屬性以更新它,將該值複製過來。

我覺得一定,通過現在的MVC 3版本,還有就是做這個好祝福方式,但我不能找到它!更簡單和優雅地做這件事的祕訣是什麼?

+0

我知道這是一個老問題,但Automapper如何?它可以爲您節省財產複製儀式 – Menahem 2011-12-25 15:16:30

回答

2

好吧,這是令人尷尬的......有一個方法Controller.UpdateModel有幾個重載,將做的伎倆。我搜索了互聯網嗨和低,只是發佈問題後,無意中發現了智能感知的答案。

2

我發現你也可以使用Entity Framework來做以下事情。它與其他選項有利有弊,但它應該與以前的答案一樣正常:

[HttpPost] 
public ActionResult Edit(QuestionGroup updatedGroup) 
{ 
    try 
    { 
     context.QuestionGroups.Attach(updatedGroup); 
     context.ObjectStateManager.ChangeObjectState(updatedGroup, System.Data.EntityState.Modified); 

     ValidateModel(updatedGroup); 

     if (this.ModelState.IsValid) 
     { 
      context.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
    } 
    catch 
    { 
    } 

    return View(); 
}