2011-10-23 5 views
1

こんにちは、親の編集ビューで正しく保存するために、子(含まれる)値を取得するにはどうすればよいですか?値は正しく表示されますが、保存されませんか?あなたはすべてのためのエディタを提供する場合親の剃刀ビューを介して子オブジェクトの値を保存していますか?

@Html.EditorFor(model => model.Children[0].Val) 

@model MVC3.Models.A 

    @Html.EditorFor(model => model.Bs.First().Val) 

    public class A 
    { 
     public int Name { get; set; } 
     public virtual ICollection<B> Bs { get; set; } 
    } 

    public class B 
    { 
     public int Val { get; set; } 
     public virtual A A { get; set; } 
    } 

答えて

1

直接答えは配列表記を使用して、子オブジェクトを参照することです(Childrenと仮定し、もちろんしてIListを実装ものです)ループを使用してコレクション内の各要素のエディタを表示するのではなく、@Html.EditorFor(model => model.Children)を使用することをお勧めします。Children

編集:IListの代わりにICollectionを修正しました。

更新:

あなたのコレクションには、唯一のICollectionを実装(したがって、刃先交換式でない)場合は、上記を作るために、代わりにあなたが現在使用して、モデルの(IListをさらす)のViewModelを使用することを検討すべきです有効です。

これはオプションではない場合、あなたはこのハックを検討できます。もちろん

// essentially creating the correct name manually 
@Html.TextBox(Html.NameFor(m => m.Children) + "[0].Val", 
       model.Children.First().Val) 

を、これは自動的にあなたが持つかもしれないエディタのテンプレートを利用するためのあなたのサポートを失ったが、これはあなたの問題ではないかもしれません(特にValは単純なタイプのように思えます)。

+0

こんにちは、返信ありがとうございます!もともと私はすべてのBsを表示し、編集を許可するためにリストを反復しますが、私はちょうど1つを保存するようにしたいと思います。私は[0]構文を試してみました。 "[ICollection ]の式に[]を使ったインデックス付けを適用できません。 – Mariah

+0

@Mariah:答えを更新しました – Jon

+0

私の2つのオブジェクトを示す投稿を更新しました。私はmvc3/c#/ .netに非常に新しいです。 – Mariah

関連する問題