2

私の見解には次のコードがあります。

@foreach (var parent in Model.Parents)
        {      
            @foreach (var child in parent.Children)
                { 

                 @Html.TextAreaFor(c => child.name)

                }                   
        }

フォーム内の他のテキストエリアは正常に保存されていますが、フォームを送信すると、コントローラーの POST メソッドが null Parents フィールドを持つ viewModel を取得します。理由はありますか?

4

1 に答える 1

6

foreachコレクションをバインドする場合は、ループを使用できません。forループを使用する必要があります:

@for (int i = 0; i < Model.Parents.Count; i++) {
    @for (int j = 0; j < Model.Parents[i].Children.Count; j++) {
        @Html.TextAreaFor(x => x.Parents[i].Children[j].name)
    }
}

または、親用のエディター テンプレートを使用することもできます (さらに、子供用の別のテンプレートも使用できます)。これには、親モデルのテンプレートを設定し、それを EditorTemplates フォルダーに配置してから、次のように呼び出す必要があります。

@Html.EditorFor(x => x.Parents)

MVC は、列挙とバインドを処理します。次に、Children リストに対して同じことを行うことができます。

それらの使用に関するmvcチュートリアルは次のとおりです(mvc4バージョンが見つかりませんでした): http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

于 2013-03-05T20:46:41.073 に答える