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

ASP.NET MVC:循环生成的同模型属性输入框仅首个验证生效问题

问题:循环生成数组属性输入框时仅第一个验证生效

问题场景

模型中定义数组属性并标记[Required]:

public class MembershipModel
{
    [Required]
    [Display(Name = "First Name")]
    public string[] Fname { get; set; }
}

视图通过for循环生成两个绑定该数组的输入框:

@model MainModel
@using (Html.BeginForm("CreateMember", "Membership", FormMethod.Post, new { role = "form", id = "myForm", @class = "form-horizontal", enctype = "multipart/form-data" }))
{
    @for (var i = 1; i <= 2; i++)
    {
         <label>First Name</label>
         <i class="fa fa-asterisk req-ico"></i>
         @Html.TextBoxFor(m => m.MembershipModel.Fname, new { @class = "memb form-control"})
         @Html.ValidationMessageFor(m => m.MembershipModel.Fname, "", new { @class = "text-danger" })
    }

<button type="button" class="btn btn-primary btn-modal" onclick="$('#myForm').submit()"><strong>Continue</strong></button>
}

仅第一个输入框的Required验证生效,后续输入框无验证提示。

原因分析

  • 直接绑定m.MembershipModel.Fname时,所有生成的输入框name属性均为MembershipModel.Fname,客户端验证框架只会为第一个同名元素绑定验证逻辑。
  • 无索引的命名方式不符合ASP.NET MVC数组模型绑定约定,后端也无法正确接收多个输入值。

解决方案

1. 提前初始化数组

在控制器Action中,为MembershipModel.Fname初始化对应长度的数组,确保视图可遍历索引:

public ActionResult CreateMember()
{
    var model = new MainModel
    {
        MembershipModel = new MembershipModel
        {
            Fname = new string[2] // 匹配视图要生成的输入框数量
        }
    };
    return View(model);
}

2. 修改视图循环逻辑

遍历数组索引,通过索引绑定数组元素,生成带索引的name属性:

@model MainModel
@using (Html.BeginForm("CreateMember", "Membership", FormMethod.Post, new { role = "form", id = "myForm", @class = "form-horizontal", enctype = "multipart/form-data" }))
{
    @for (var i = 0; i < Model.MembershipModel.Fname.Length; i++)
    {
         <label>First Name</label>
         <i class="fa fa-asterisk req-ico"></i>
         @Html.TextBoxFor(m => m.MembershipModel.Fname[i], new { @class = "memb form-control"})
         @Html.ValidationMessageFor(m => m.MembershipModel.Fname[i], "", new { @class = "text-danger" })
    }

<button type="button" class="btn btn-primary btn-modal" onclick="$('#myForm').submit()"><strong>Continue</strong></button>
}

说明

修改后,每个输入框的name属性会变为MembershipModel.Fname[0]、MembershipModel.Fname[1],既满足客户端验证框架的元素识别规则(每个元素有独立的验证逻辑),也符合ASP.NET MVC数组模型绑定要求,后端能正确接收所有输入值,同时每个输入框都会触发[Required]验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:33:25