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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:18:02