2012-03-18 4 views
0

フィールドと簡単なIEnumerableビューでBOOKVIEWMODELを送信しました。このリストをIEnumerableビューのJSON AJAXビューのビューで取得し、テーブルを作成します。Ristourneコントローラでそれを回復するためにVIEWでjQueryを使って(ビュー)、それは非常によく動作しますが、私は、私は(BINDまたはリフレッシュ)を埋める方法を知りませリスト私bOOKVIEWMODELのIEnumerableを:asp.net mvc3ビューでビューモデルを更新しました

[HttpPost] 
    public ActionResult Create(BookViewModel _bookViewModel) 
    { 
     if (ModelState.IsValid) 
     { 

     _bookViewModel.Ristourne 



      return RedirectToAction("Index"); 

     } 

     return View(_bookViewModel); 

私bookviewmodel

public class BookViewModel 
    { 

     public String book { get; set; } 
     public String price { get; set; } 

     public IEnumerable<Ristourne> Ristourne { get; set; } 

     } 
+0

正しいフルネーム、つまりRistourne [0]でレンダリングするときに、フォーム要素がHTMLに書き出されるようにしてください。 その他あなたのビューコードでより多くの情報が役に立つでしょう – dreza

答えて

0

モデルバインディングを機能させるには、規約MVを「模倣する」必要がありますフォームフィールドを生成するときにCが使用されます。

Ristourneクラスの内容はわかりませんが、Fooというフィールドが1つあるとします。その場合

あなたは(JSON AJAXコールバックからの)要素をレンダリングするとき、彼らは次のようになります

<input type="text" name="Model.Ristourne[0].Foo" id="Model.Ristourne[0].Foo"/> 
<input type="text" name="Model.Ristourne[1].Foo" id="Model.Ristourne[1].Foo"/> 
<input type="text" name="Model.Ristourne[2].Foo" id="Model.Ristourne[2].Foo"/> 

のように。あなたのAJAXコールバックで簡単に行うことができます。基本的なforループを使って要素インデクサーを作成するだけです。

Altenatively、この問題を回避チート/簡単な方法は、あなたのAJAXアクションを作ることであろうPartialViewResultを返す:

public PartialViewResult Book() 
{ 
    var ristournes = _repo.Get(); 
    var model = new BooksViewModel { Ristourne = ristournes }; 
    return PartialView(model); 
} 

そして、部分図:

@Html.EditorFor(model => mode.Ristourne) 

を次にMVCが作成されます。フォームフィールドが正しく表示されます。

このオプションは、動的に生成されるフォームフィールドより常に優先されます。このパスを頻繁に使いたい場合は、Knockout.jsやUpshotのようなものを考慮する必要があります。

+0

2番目のオプションはisveryですが、私が理解していれば前にpartialviewブックを作成していますか?私は例外があるので、部分ビューのブックを見つけることができません。 – chadis

+0

@chadis - 正しい。 – RPM1984