2011-06-22 21 views
3

オブジェクトのリストにバインドするときに、オブジェクトにバインドする際に問題が発生します。 ツールを使用してMvc3.1をアップデートする。ASP.NET MVC:モデルバインディング複合型

フォームのクラスにバインドするとき、HttpPost関数が正しいモデルを受け取ります。 FormViewModelにバインドするとき、HttpPost-functionは空のモデルを受け取ります。

他のモデルを含むモデルをバインドする際に制限はありますか?

public class FormViewModel 
{ 
    public Form Form { get; set; } 
} 

public class Form 
{ 
    public List<Section> Sections { get; set; } 
} 

public class Section 
{ 
    public List<Question> Questions { get; set; } 
} 

public class Question 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

答えて

2

入力要素のname属性は、バインダーがその魔法を実行するためのコンテキストとして使用するものです。

@model Form 
@Html.EditorFor(m => m.Sections) 

そして、あなたのポストの方法は次のようになります:

@model FormViewModel 
@Html.EditorFor(m => m.Form.Sections) 

そして、あなた:あなたがあるためにあなたのビューを変更した場合

[HttpPost] 
public ActionResult Function(FormViewModel formViewModel) 
{ 
    // ... 
} 

私の推測では、あなたのビューは、このようなものが含まれていることですFormViewModelのインスタンスを返すアクションを取得すると、うまくいくでしょう。ヘルパーは、ラムダ式の本体を使用して入力要素の名前を作成します。この場合、Form.Sections[0].Fieldのようなものが作成されます。次に、モデルバインダーはForm.Sections []でピックアップし、FormViewModelを適切に初期化できます。

関連する問題