【问题标题】:MVC3 in situ table updateMVC3 原位表更新
【发布时间】:2012-09-13 21:30:08
【问题描述】:

我有点困惑。

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

我的 ViewModel 是三个通用列表(Schemes、Types、Tables)的集合,

表模型 方案清单 类型列表 表格列表

Schemes 和 Types 填充下拉列表以充当第三个(Tables)集合的过滤器,该集合通过 @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 参数包含我的模型,但它是空的。

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    @{
      var tableIDs = "";
    
      foreach (var i in Model.TablesList) {
         tableIDs = //serialized object in proper format
      }
    }
    
    @Html.Hidden("tableList", @tableIDs)
    

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

    HTH。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      相关资源
      最近更新 更多