2012-03-18 93 views
0

我發送一個BOOKVIEWMODEL字段和一個簡單的IEnumerable在視圖中我得到這個列表IEnumerable在視圖中通過一個JSON AJAX方法在視圖中,我填充了我的表Ristourne (視圖)與jQuery它工作得很好,但我不知道我該怎麼填(BIND或刷新)列表的IEnumerable我bOOKVIEWMODEL在以恢復它在控制器上的VIEW: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 2012-03-18 20:24:25

回答

0

對於模型綁定工作,你需要「模仿」約定MV C在生成表單域時使用。

我不知道Ristourne班的內容,但我們假設它有1個字段Foo

在這種情況下,當你呈現出的元素(從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

第二個選項很好,但如果我明白我以前創建一個partialview書?因爲我有一個例外,它無法找到partialview書 – chadis 2012-03-18 20:58:35

+0

@chadis - 正確。 – RPM1984 2012-03-18 23:28:10