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

如何提交隐藏值数组?ASP.NET MVC模型绑定场景

ASP.NET MVC 列表属性隐藏字段提交问题解决指南

我来帮你搞定这个列表属性提交的问题~咱们先弄明白为什么原来的代码没法正确绑定:

问题根源

你用foreach循环生成的隐藏字段,name属性是property.Id、property.Value这种格式,但ASP.NET MVC的模型绑定器需要带索引的命名规则才能识别为集合元素,比如Client.Properties[0].Id、Client.Properties[1].Value。只有这种格式,绑定器才能把提交的值对应到模型列表的对应位置。

解决方法一:用for循环替代foreach

如果你的Properties是IList<T>类型(支持索引访问),直接用for循环就能生成正确的name属性:

@if (Model?.Client?.Properties != null && Model.Client.Properties is IList<Property>) {
    for (int i = 0; i < Model.Client.Properties.Count; i++) {
        @Html.HiddenFor(x => x.Client.Properties[i].Id)
        @Html.HiddenFor(x => x.Client.Properties[i].Value)
        @Html.HiddenFor(x => x.Client.Properties[i].Key)
    }
}

这样生成的HTML隐藏字段name会是Client.Properties[0].Id这种格式,模型绑定器就能正确识别并把值绑定到Model.Client.Properties列表中。

解决方法二:使用EditorTemplate(更优雅的方案)

如果你的Property类型比较复杂,或者后续可能需要扩展展示逻辑,推荐用编辑器模板:

  1. 首先在~/Views/Shared/EditorTemplates文件夹下创建Property.cshtml(文件名要和类名一致):
@model YourNamespace.Property // 替换成你的Property类的命名空间
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.Value)
@Html.HiddenFor(m => m.Key)
  1. 然后在主视图中直接调用EditorFor:
@if (Model?.Client?.Properties != null) {
    @Html.EditorFor(x => x.Client.Properties)
}

编辑器模板会自动遍历集合中的每个元素,生成符合绑定规则的隐藏字段,代码更简洁,维护性也更好。

验证提交结果

最后在Controller的Action方法中,确保接收的参数是你的主模型类型:

[HttpPost]
public ActionResult YourActionName(YourMainModel model) {
    // 此时model.Client.Properties应该已经正确绑定了提交的隐藏字段值
    // 这里写你的业务逻辑
    return View(model);
}

内容的提问来源于stack exchange,提问作者Linda Lawton - DaImTo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:20:13