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

未添加[Required]属性,模型MiddleName为何仍触发必填验证?

问题

为何模型属性未显式添加[Required]特性,却仍会进行必填验证?前端表单中若MiddleName输入框留空或未填写,就会显示错误提示“MiddleName是必填项”。

我的EmployeeModel属性代码如下:

//this is from my EmployeeModel
[Column("MiddleName")]
[StringLength(50, ErrorMessage = "Maximum of 50 characters and minimum of 2 characters.", MinimumLength = 2)]
public string MiddleName { get; set; }

视图代码(使用模板/脚手架生成,用于新增操作):

<div class="form-group">
     <label asp-for="MiddleName" class="control-label"></label>
     <input asp-for="MiddleName" class="form-control" />
     <span asp-validation-for="MiddleName" class="text-danger"></span>
</div>

我曾尝试为该属性添加[Required(AllowEmptyStrings = true)]特性,但这与StringLength验证规则冲突。

解答
  • 核心原因:StringLength的MinimumLength触发了隐式必填验证
    当你给StringLength特性设置MinimumLength = 2时,ASP.NET Core框架会自动将该字段判定为必填项。因为要满足最小长度2的规则,字段值不能为null或空字符串,所以框架会自动注入隐式的必填验证逻辑,无需显式添加[Required]特性。

  • 解决冲突的可行方案
    如果你希望MiddleName是可选字段,但填写时必须满足长度2-50的要求,可以拆分验证规则:

    1. 移除StringLength中的MinimumLength参数
    2. 单独使用MinLength特性控制最小长度,字段允许为null(无需添加[Required])
      调整后的模型代码示例:
    [Column("MiddleName")]
    [StringLength(50, ErrorMessage = "Maximum of 50 characters.")]
    [MinLength(2, ErrorMessage = "Minimum of 2 characters.")]
    public string MiddleName { get; set; }
    

    这样设置后:

    • 字段可以留空(为null或空字符串),不会触发必填验证
    • 一旦填写内容,就必须满足长度2-50的要求

内容的提问来源于stack exchange,提问作者John Phillip Abello

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:03:25