MVC3原位表更新

时间:2012-09-13 13:16:23

标签: asp.net asp.net-mvc-3 model-binding

我有点困惑。

我有一个非常标准的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 参数包含我的模型,但它是空的。

知道我做错了什么 - 我很害怕这个很新。

由于

1 个答案:

答案 0 :(得分:2)

隐藏不能占用复杂的物体;您需要做的是反序列化每个对象并将其作为字符串存储在隐藏中,如:

@{
  var tableIDs = "";

  foreach (var i in Model.TablesList) {
     tableIDs = //serialized object in proper format
  }
}

@Html.Hidden("tableList", @tableIDs)

从服务器,您可以通过自定义模型绑定器创建对象,或接受string类型的输入,并反序列化集合。

HTH。

相关问题