gpt4 book ai didi

c# - 使用 C# MVC BeginForm 发布表单字段数组

转载 作者:行者123 更新时间:2023-11-30 22:07:24 25 4
gpt4 key购买 nike

我有一个 .NET MVC4 网络应用程序,我在其中使用 jquery 数据表来创建网格。

该网格包含大约 100 个用户,但每页仅显示 5 个用户。在每个用户名前面我都有一个复选框。我可以从我的网格中选择用户,然后按删除按钮删除这些用户。

我的表是这样构建的(简单地说):

<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>

现在我可以选择前两个复选框并点击删除按钮来删除所选记录。工作正常。这将调用如下所示的 ActionResult:

public ActionResult Delete(UserDeleteModel[] users)
{
// delete records code
}

*但是,* 当我导航到数据表网格中的第二页时,我的表格 HTML 将如下所示:

<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>

因此 input 字段从 5 开始计数。这当然是有道理的。

但是当我选择一个用户并点击删除按钮时,我确实看到浏览器发布了所有输入字段及其值,但是 ActionResult 给我一个空的 UserDeleteModel[]列表

UserDeleteModel[] listNULL 的原因是表格网格中的表单字段不是从 0 开始计数的第二页。它从第二页的 5 开始。

出于某种原因,.NET 必须具有从 0 开始按顺序向上计数的字段。如果它从任何其他数字开始,则发布的字段不会映射到我在 Controller 中的 ViewModel。

我确实在 Request.Form 对象中看到了表单值。但由于某种原因,它没有被映射。

这当然是一个有问题的错误。有人知道如何解决这个问题吗?

最佳答案

您遇到的问题是 ASP.NET MVC 如何绑定(bind)集合。您正在发布一个非顺序集合(即索引不从 0 开始),因此默认的 MVC 绑定(bind)器不知道如何解析。

看看下面的答案:

Non-sequential collection binding

其他解决方案是根据您的需要创建您自己的 Binder 。

关于c# - 使用 C# MVC BeginForm 发布表单字段数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23013658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com