我发送带有字段的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; }
}
答案 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这样的东西。