0

我有点困惑。

我有一个非常标准的 MVC3 设置:Home Controller/Index 方法,ViewModel 的强类型视图。

我的 ViewModel 是三个通用列表(方案、类型、表)的集合,

TableModel Schemes List TypesList TablesList

方案和类型填充下拉列表以充当第三个(表)集合的过滤器,该集合通过 @foreach 循环填充 HTML 表

我通过调用 Home/Index(无参数)填充这些。这工作正常。现在,我想通过选中一个复选框来标记 TablesList 集合中的许多行以进行删除,然后在单击提交时,我希望通过 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参数包含我的模型,但它是空的。

知道我做错了什么-恐怕对此很陌生。

谢谢

4

1 回答 1

2

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

@{
  var tableIDs = "";

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

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

在服务器上,您可以通过自定义模型绑定器创建对象,或者接受字符串类型的输入,然后反序列化集合。

HTH。

于 2012-09-13T13:30:08.500 回答