ASP.NET Core中[Required]属性对非空字符串仍报校验错误问题
可能的原因及对应解决方案
1. 视图input标签属性冲突
你在使用asp-for标签助手的同时,手动重复添加了name和value属性。asp-for本身会自动生成对应属性的name、id、value值,手动重复添加会导致渲染异常或者绑定值冲突。
修改方案:删除手动添加的name="FirstName"和value="@Model.FirstName",修改后代码如下:
<div class="col-md-4"> <input type="text" class="form-control @(ViewData.ModelState["FirstName"]?.Errors.Count > 0 ? "is-invalid state-invalid" : "is-valid state-valid")" asp-for="FirstName" placeholder="First Name"> <div class="mb-2"></div> <span class="text-danger" asp-validation-for="FirstName"></span> </div>
2. 可空引用类型配置导致的隐式校验
.NET 6及以上版本默认启用可空引用类型,如果你的项目开启了该配置,非可空的引用类型属性即使不加[Required]特性,也会被默认触发必填校验,属性未设置初始值时就算前端传了有效值也可能触发校验报错。
修改方案二选一:
- 保留可空引用类型配置,给属性设置初始值:
[Required] public string FirstName { get; set; } = string.Empty;
- 不需要可空引用类型的话,在项目
.csproj文件中将<Nullable>enable</Nullable>修改为<Nullable>disable</Nullable>
3. 其他潜在问题
- 确认你使用的
[Required]特性来自System.ComponentModel.DataAnnotations命名空间,不要引用其他命名空间下的同名特性 - 检查控制器动作逻辑,是否在调用
ModelState.IsValid之前,手动修改了FirstName属性值或者给ModelState["FirstName"]手动添加了错误记录
内容的提问来源于stack exchange,提问作者za_ali33
相关产品推荐
相关产品推荐

