【发布时间】:2015-04-13 19:18:02
【问题描述】:
我需要对包含集合的视图模型进行持久更改,但是每次我回发到控制器时,我都会丢失模型绑定。我对 MVC 还很陌生,所以我可能在这里遗漏了一些明显的东西。
@{ Html.RenderAction("TabList", "TabController", new {Id = Model.Id}); }
我有一个主容器页面,该页面具有对控制器的渲染操作以返回第一个局部视图。
[HttpGet]
public ViewResult TabList(Guid orderid)
{
// build the viewmodel
return View("ControlTabList", model);
}
从那里迭代集合和基于对象类型的不同渲染部分。 (我在这里简化了代码,因为项目是多态的并且有某种类型的向下转换)
@model TabListViewModel
@using (Html.BeginForm("UpdateItem", "TabController", FormMethod.Post, new {Id = "myForm"}))
{
@Html.AntiForgeryToken()
<input type="submit" value="Send" id="submitButton"/>
@for (int i = 0, c = this.Model.Count; i < c; i++)
{
var currentItem = this.Model.ElementAt(i);
@switch (currentItem.Code)
{
case "1":
Html.RenderPartial("Partials/ItemOne", currentItem);
break;
case "2":
Html.RenderPartial("Partials/ItemTwo",currentItem);
break;
default:
Html.RenderPartial("Partials/ItemThree",currentItem);
break;
}
}
}
当我发回控制器时,我的 ViewModel 将始终为空。
[HttpPost]
public ActionResult UpdateItems(TabListViewModel model)
{
/* i will remove the redirect here, as the model above is always null*
}
我丢失绑定有什么原因吗?我想保存整个集合,而不是单独保存集合中的每个项目。
【问题讨论】:
-
你的帖子没有
[ValidateAntiForgeryToken] -
我忘了包括,但它应该在示例中
-
检查您发布的数据,看看为什么它没有进入模型。也许名称不同或其他。它位于
Request.Form。名称应与模型中的属性匹配。 -
当我看到 request.form 或流阅读器时,我看到从部分返回的字段属性,但不是我期望的 ViewModel 或对象集合。
-
属性名和ViewModel中的属性名一样吗? ViewModel 是否有一个空的构造函数?
标签: c# asp.net-mvc