2016-12-29 9 views
1

私は2つのクラスを持ち、最初のクラスにはListが含まれています。 VIEWはモデルとしてListを受け取ります。 私はビューを投稿すると、コントローラ内でそれぞれの単純なプロパティを取得できます。ただし、List <>はサブモデルでは常にnullです。DotNet複雑なオブジェクト包含リストのMVCバインドリスト

二つのクラス:ビューページで

public class MyModel 
{ 
    public int ModelId {get;set;} 
    public string Description {get;set;} 
    public List<SubModel> SubModels {get;set;} 
} 

public class SubModel 
{ 
    public int MySubModelId {get;set;} 
    public string Description {get;set;} 
} 

受けたモデルは、インターネット上の勧告に従い

@model List<MyModel> 

ですが、私はビューで私のクラスをレンダリングするeditorforエディタを作成しました:

@model MyModel 
<tr id="@Model.ModelId"> 
    @Html.HiddenFor(m => m.ModelId) 
    @Html.HiddenFor(m => m.Description) 

    <td>@Model.Description</td> 
</tr> 

@for(int i = 0; i < Model.SubModels.Count; i++) 
{ 
    // How to render the class here to be able to be post in the controller? 
    // @Html.HiddenFor(m => m.SubModels[i]) will not work of course... 
} 
+0

このリクエストのパイプラインに、コントローラとその他のコードを表示してください。 –

+0

コントローラーを見ることなく、伝えるのは難しいです。しかし、通常はnullになるので、複雑な型をコントローラに渡すことはできません。おそらくこれは、クエリ文字列が他のさまざまな理由の中で長すぎる可能性があるためです。 –

答えて

0

残念ながらHiddenForは再帰的に動作しませんが、y OUは手でそれを行うことができます。

@for (int i = 0; i < Model.SubModels.Count; i++) 
{ 
    // postback everything 
    @Html.HiddenFor(m => m.SubModels[i].MySubModelId) 
    @Html.HiddenFor(m => m.SubModels[i].Description) 
} 

が戻ったばかりの MySubModelId各サブモデルのための投稿はnullであることから Model.SubModelsを防ぐのに十分だろう。

通常、私はIDをポストバックし、アクションメソッド内のすべてを再読み込みします。

+0

問題は、このSubModelからの情報がユーザーによって変更される必要があることです。だから私はidsを保存するだけではいけません:( – Eagle

+0

編集可能なフィールドの場合は、HiddenForの代わりにEditorForまたはTextBoxForを使用します - 基本的にはinput要素を生成するものです。 – buffjape

0

メインモデルのIDを隠しただけで、各サブモデルのIDも非表示にする必要があります。さもなければ、プログラムがそれらを追跡する方法はありません。各サブモデルをカバーするfor-loopに隠しフィールドを含めます。

@Html.HiddenFor(m => m.SubModels[i].MySubModelId) 

(これはそれを修正しない場合、問題はあなたのコントローラで最も可能性が高いですし、他の可能性をハッシュすることを掲示する必要があります。)

0

答えは次のとおりです。それぞれのEditorForテンプレートを作成しますList <>を含むクラスのプロパティを使用して、コントローラに取り込むことができます。

ご協力いただきありがとうございます。皆さんのご協力ありがとうございます。

関連する問題