使用表行作为具有MVC模型绑定的表单元素

时间:2016-03-04 09:10:43

标签: asp.net-mvc twitter-bootstrap model-view-controller asp.net-mvc-5 model-binding

我有一个MVC5 / Bootstrap应用程序,它有一个页面,用户可以在表格中添加和删除行,作为更大表单的一部分。

要添加行,用户单击一个图标,然后使用弹出窗口中显示的TypeAhead字段搜索数据,当选择该字段时,使用AJAX检索行数据并将该行插入表中。

可以通过单击每行中的图标来删除行,然后删除该行。这两个操作都会影响绑定的隐藏输入字段,该字段包含行的ID列表,例如" {100001},{100003},{100004}"

当提交包含此表的表单时,将解析此隐藏字段,并使用EF6执行相应的数据库操作以添加或删除项目。

我的问题是这种使用由控制器方法手动解析的隐藏字段的方法是否是最佳选择。我在想可能有一种更惯用的方式来利用MVC模型绑定。例如在每一行或某些此类机制上隐藏了复选框。

1 个答案:

答案 0 :(得分:0)

您要绑定的ViewModel可以包含一组行视图模型,它们包含单行的所有输入。

要提交这些内容,请使用索引绑定它们。

<table>
    <tbody>
    <tr>
        <td>
               @Html.HiddenFor(m => m.RowData[0].SomeRowProperty)
               <input type="hidden" name="RowData.Index" value="0" />
        </td>     
     </tr>
     <tr>
        <td>
               @Html.HiddenFor(m => m.RowData[1].SomeRowProperty)
               <input type="hidden" name="RowData.Index" value="1" />      
        </td>     
     </tr>
    </tbody>
</table>

另见Model binding to a list