1

私は.netMVCを1、2年使用していますが、この質問は私の本では常に答えられていません。非常に簡単な例を示しましょう

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

また

[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メソッドは、Web全体で選択されているメソッドのようです。私が少し矛盾しているのは、必要なフィールドを持つViewModelがすでにあるということですが、なぜフォームコレクションを再度使用するのですか?多くの人が投稿でビューモデルを厳密に使用することも指摘していますが、その方法を使用したdbモデルの更新の良い例は見ていません。

dbオブジェクトを更新する意図された方法は何ですか?

4

1 に答える 1

3

意図した方法は本当にありません。Ruby on Railsとは異なり、ASP.Net MVCフレームワークは、コントローラーとモデルの相互作用の特定のパターンに縛られることはありません。個人的には、実行時エラーよりもミスをするとコンパイラエラーが発生する可能性が高いため、最初に近いものを使用します。ただし、このコードはすぐに手に負えなくなるため、コントローラーメソッド以外の場所に移動することをお勧めします。

于 2012-04-20T20:03:41.453 に答える