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

ASP.NET Core 7 MVC模型验证异常:ModelState始终为Valid

ASP.NET Core 7 MVC中MetadataTypeAttribute验证不生效的解决方案

问题根源

ASP.NET Core的模型元数据系统与ASP.NET 4.x存在差异,默认不会自动识别并应用MetadataTypeAttribute,这就是你沿用旧模式但验证失效、ModelState.IsValid始终返回true的核心原因。

解决方案

1. 手动注册元数据类型提供器

在Program.cs的服务配置环节,显式添加MetadataTypeAttributeProvider,让Core MVC能够识别元数据类中的验证规则:

var builder = WebApplication.CreateBuilder(args);

// 配置控制器和视图服务,并添加元数据提供器
builder.Services.AddControllersWithViews()
    .AddMvcOptions(options =>
    {
        options.ModelMetadataDetailsProviders.Add(new MetadataTypeAttributeProvider());
    });

// 其他服务配置代码...

var app = builder.Build();

// 中间件配置代码...

2. 确认元数据类与实体类的匹配性

检查以下几点(你的现有代码已符合要求,可快速验证):

  • 实体类TcPhoneType是partial类,且元数据类所在的partial定义与EF自动生成的实体类处于同一命名空间
  • 元数据类的属性名称、类型与实体类完全对应(EF生成类的#nullable disable配置不影响元数据类验证规则的生效)

3. 验证前端依赖脚本

确认_ValidationScriptsPartial中包含了客户端验证所需的脚本(默认ASP.NET Core模板的该文件已包含jquery.validate和jquery.validate.unobtrusive,请勿随意修改或移除)

效果验证

重启项目后,提交不符合验证规则的表单(比如空的PhoneTypeId、超出长度的描述内容),ModelState.IsValid会正确返回false,同时页面会显示对应的验证错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:45:17