未添加[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的要求,可以拆分验证规则:- 移除
StringLength中的MinimumLength参数 - 单独使用
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
相关产品推荐
相关产品推荐

