2012-04-20 59 views
1

我一直在使用.net MVC一兩年了,這個問題在我的書中一直沒有答案。讓我展示一個很簡單的例子ASP.NET MVC什麼是在post方法中更新數據庫對象的正確方法

PersonViewModel

public class PersonViewModel 
{ 
    public Person person { get; set; } //person is a db generated object 
    public SelectList jobtypes { get; set; } // drop down list for this view 
} 

PersonController

public ActionResult Edit(int id) 
{ 
    PersonViewModel model = new PersonViewModel(); 
    model.person = db.GetPerson(id); //get a person from the db 
    model.jobtypes = GetThemJobTypes(); 
    return View(model); 
} 

現在的問題是它的,下面我應該怎麼辦?

[HttpPost] 
public ActionResult Edit (PersonViewModel model) 
{ 
    Person person = db.GetPerson(model.person.personid); 

    person.firstname = model.person.firstname; 
    person.lastname = model.person.lastname; 
    person.jobtypeid = model.person.jobtypeid; 
    person.save(); 

    person.favoritetoy.name = model.person.favoritetoy.name; 
    person.favoritetoy.save(); 
} 

OR

[HttpPost] 
public ActionResult Edit (int id, FormCollection formValues) 
{ 
    Person person = db.GetPerson(id); 
    UpdateModel(person, "person"); 
    person.save() 

    UpdateModel(person.favoritetoy, "favoritetoy"); 
    person.favoritetoy.save() 
} 

好像用的UpdateModel的方法的FormCollection是首選的無處不在網絡上的方法。我有點衝突的是,我們已經有一個ViewModel與我們想要的字段,爲什麼再次使用formcollection?許多人也指出要嚴格使用視圖模型,但我沒有看到使用該方法更新db模型的好例子。

什麼是更新數據庫對象的預期方式?

回答

3

真的沒有打算的方式。與Ruby on Rails不同,ASP.Net MVC框架不會將您與控制器和模型交互的任何特定模式綁定。就我個人而言,我使用的是更接近第一個的東西,因爲如果您犯的錯誤比運行時錯誤更可能導致編譯器錯誤。我建議將這些代碼移動到除控制器方法之外的位置,因爲它會快速增長。

+0

此外,因爲使用的是在你的代碼字符串值,如果該模型是改變這不會自動更新我不會用第二個方法。 – 2012-04-20 22:18:06

相關問題