asp.net mvc3更新(刷新)视图中的viewmodel

时间:2012-03-18 20:16:13

标签: asp.net-mvc-3

我发送带有字段的BOOKVIEWMODEL和一个简单的IEnumerable视图我通过JSON AJAX中的方法在视图中获取此列表IEnumerable并且我用JQUERY填充我的表Ristourne(View)它工作得很好但是我没有知道如何在VIEW中填充(BIND或刷新)我的BOOKVIEWMODEL列表IEnumerable以在Controller中恢复它:

    [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; }

        }

1 个答案:

答案 0 :(得分:0)

要使模型绑定起作用,您需要“模仿”MVC在生成表单字段时使用的约定。

我不知道Ristourne类的内容,但是我们说它有一个名为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循环来创建元素索引器。

另外,这个问题的一个骗子/简单方法是让你的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这样的东西。