You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中使用IEnumerable<T>和foreach提交复选框参数到控制器失效

参数传递失效的原因

ASP.NET Core 的模型绑定系统对集合类型的参数绑定有固定的格式要求:表单提交的字段名必须携带索引标识,比如[0].ProductKey、[0].IsAvailable、[1].ProductKey这种格式,绑定系统才能将字段映射到集合的对应元素中。
你当前使用foreach遍历生成表单元素,最终渲染出来的字段名都是item.IsAvailable、item.ProductKey,没有索引信息,模型绑定无法识别这些字段属于集合中的哪个元素,所以最终接收到的productList是空集合。


解决方法

推荐使用原生支持的for循环替换foreach,步骤如下:

  1. 首先修改视图的模型声明,将IEnumerable<Products>改为支持索引访问的IList<Products>:
@model IList<Products>
  1. 替换循环逻辑,使用带索引的for循环生成表单元素,不需要手动指定checked、value属性,asp-for标签助手会自动完成值绑定:
<form asp-controller="Product" asp-action="FindIfProductInStock">
<div class="row">
    @for (int i = 0; i < Model.Count; i++)
    {
           <div class="form-group">
                <label class="label-checkbox">
                    <input asp-for="@Model[i].IsAvailable" type="checkbox" />
                    <span>
                        @Html.DisplayFor(m => m[i].ProductName)
                    </span>
                </label>
            </div>
            <div class="form-group">
                <input asp-for="@Model[i].ProductKey" type="hidden" />
            </div>
     }
  </div>
  <div class="form-group">
     <input type="submit" value="Update" class="btn btn-primary" />
  </div>
</form>

修改完成后控制器返回视图前将IEnumerable类型的模型转为List类型即可,提交表单后控制器就能正常接收到完整的productList集合数据。

内容的提问来源于stack exchange,提问作者Cenderze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 06:54:07