C# 使用C MVC发布表单字段数组
我有一个.NETMVC4Web应用程序,在其中我使用jquery数据表来创建网格 该网格可容纳约100个用户,但每页仅显示5个用户。在每个用户名前面我都有一个复选框。我可以从我的网格中选择用户,然后按delete按钮删除这些用户 我的表是这样构建的,简单地说:C# 使用C MVC发布表单字段数组,c#,asp.net-mvc-4,datatables,jquery-datatables,C#,Asp.net Mvc 4,Datatables,Jquery Datatables,我有一个.NETMVC4Web应用程序,在其中我使用jquery数据表来创建网格 该网格可容纳约100个用户,但每页仅显示5个用户。在每个用户名前面我都有一个复选框。我可以从我的网格中选择用户,然后按delete按钮删除这些用户 我的表是这样构建的,简单地说: <table class="datatables"> <tbody> <tr> <td><input type="checkbox" n
<table class="datatables">
<tbody>
<tr>
<td><input type="checkbox" name="user[0].Delete" /></td>
<td><input type="hidden" name="user[0].Username" /></td>
</tr>
<tr>
<td><input type="checkbox" name="user[1].Delete" /></td>
<td><input type="hidden" name="user[1].Username" /></td>
</tr>
<tr>
<td><input type="checkbox" name="user[2].Delete" /></td>
<td><input type="hidden" name="user[2].Username" /></td>
</tr>
<tr>
<td><input type="checkbox" name="user[3].Delete" /></td>
<td><input type="hidden" name="user[3].Username" /></td>
</tr>
<tr>
<td><input type="checkbox" name="user[4].Delete" /></td>
<td><input type="hidden" name="user[4].Username" /></td>
</tr>
</tbody>
</table>
*但是,*当我导航到datatables网格中的第二页时,我的表格HTML将如下所示:
public ActionResult Delete(UserDeleteModel[] users)
{
// delete records code
}
<table class="datatables">
<tbody>
<tr>
<td><input type="checkbox" name="user[5].Delete" /></td>
<td><input type="hidden" name="user[5].Username" /></td>
</tr>
<tr>
<td><input type="checkbox" name="user[6].Delete" /></td>
<td><input type="hidden" name="user[6].Username" /></td>
</tr>
<tr>
<td><input type="checkbox" name="user[7].Delete" /></td>
<td><input type="hidden" name="user[7].Username" /></td>
</tr>
<tr>
<td><input type="checkbox" name="user[8].Delete" /></td>
<td><input type="hidden" name="user[8].Username" /></td>
</tr>
<tr>
<td><input type="checkbox" name="user[9].Delete" /></td>
<td><input type="hidden" name="user[9].Username" /></td>
</tr>
</tbody>
</table>
所以输入字段从5开始计数。这当然有道理
但是当我选择一个用户并点击Delete按钮时,我确实看到浏览器发布了所有的输入字段及其值,但是ActionResult给了我一个空的UserDeleteModel[]列表
UserDeleteModel[]列表为空的原因是表格网格中的表单字段在第二页上没有从0开始计数。从第二页的5开始
出于某种原因,.NET必须具有从0开始按顺序向上计数的字段。如果它从任何其他数字开始,则发布的字段不会映射到控制器中的my ViewModel
我确实在Request.form对象中看到了表单值。但出于某种原因,它没有被映射
这当然是一个有问题的bug。有人知道如何解决这个问题吗?您遇到的问题是ASP.NET MVC如何绑定集合。您正在发布一个非顺序集合,即索引不是以0开头的,因此默认MVC绑定器不知道如何解析 请看以下答案:
另一种解决方案是根据需要创建自己的绑定器。如果您使用的是jquery datatable means,那么为什么您可以简单地删除脚本本身中的选定项。您是否尝试过在控制器操作中初始化数组,然后使用TryUpdateModel?@AdrianWragg刚刚尝试过,但运气不佳。它是这样的:list=newuserdeletemodel[5];TryUpdateModellist;。甚至:TryUpdateModelRequest.Form。我可以看到Request.Form中有这些值。它只是不映射事物。@Vivendi尝试[10],以防只填充索引5到9?您可能还需要尝试TryUpdateModellist,user@阿德里安·拉格按照你的建议试过了。不幸的是没有运气。数组中的所有键都保持空。