我有点困惑。
我有一个非常标准的MVC3设置:Home Controller / Index方法,ViewModel的强类型视图。
我的ViewModel是三个通用列表(方案,类型,表)的集合,
的TableModel 计划清单 TypesList TablesList
方案和类型填充下拉列表以充当第三个(Tables)集合的过滤器,该集合通过@foreach循环填充HTML表
我通过调用Home / Index(无参数)来填充这些内容。这很好用。现在我想通过选中一个复选框来标记TablesList集合中的一些行以进行删除,然后在单击Submit时,我希望通过Post执行删除操作,并将表内容刷新,其余表格将重新刷回相同的地方(替换现有的HTML表格
在我的索引视图中,我有这一部分:
@using (Html.BeginForm("DeleteTables", "Home"))
{
@Html.Hidden("tableList", @Model.TablesList)
<input id="deleteButton" type="submit" />
}
在我的HomeController中我有一个POST方法如下
[HttpPost]
public ActionResult DeleteTables(List<ViewModel.ITableInformation> tableList)
{
var deleteableTableIds = from t in tableList
where t.DeleteTable
select t.TableId;
this.tableModel.DeleteTablesById(deleteableTableIds.ToList());
.... execute a db call to get remaining tables and return a PartialView or JSON
}
问题是我希望这个函数的 tableList 参数包含我的模型,但它是空的。
知道我做错了什么 - 我很害怕这个很新。
由于
答案 0 :(得分:2)
隐藏不能占用复杂的物体;您需要做的是反序列化每个对象并将其作为字符串存储在隐藏中,如:
@{
var tableIDs = "";
foreach (var i in Model.TablesList) {
tableIDs = //serialized object in proper format
}
}
@Html.Hidden("tableList", @tableIDs)
从服务器,您可以通过自定义模型绑定器创建对象,或接受string类型的输入,并反序列化集合。
HTH。