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

ASP.NET Core MVC 6.0模型验证失败无需自定义验证的解决方案咨询

问题原因

你的验证失败是.NET 6+默认启用可空引用类型导致的:EF Core自动生成的Ilceler实体类中,Iller类型的导航属性Il被标记为非空引用类型(= null!),ASP.NET Core模型验证会默认校验所有非空引用类型属性是否有有效值,你的提交表单只传了IlId、IlceAd等字段,没有对Il导航属性赋值,因此触发验证失败。

以下三个方案都不需要编写自定义验证逻辑,操作都非常简单:

方案1:修改导航属性为可空(最推荐)

直接修改Ilceler模型中Il属性的定义,将其标记为可空引用类型即可:

// 把原来的非空定义
// public virtual Iller Il { get; set; } = null!;
// 修改为
public virtual Iller? Il { get; set; }

该修改不会影响外键IlId的正常使用,也不会破坏EF Core的映射关系,完全符合你不需要用到Iller导航属性的业务场景。

方案2:给导航属性加忽略验证标记

如果你不想修改实体类的可空声明,只需要在Il属性上加[ValidateNever]特性,模型验证就会自动跳过该属性:

using Microsoft.AspNetCore.Mvc;

// 其他属性不变
[ValidateNever]
public virtual Iller Il { get; set; } = null!;

方案3:控制器中手动清除对应验证错误

如果不想修改模型代码,只需要在控制器判断ModelState.IsValid之前,手动移除Il属性对应的验证错误即可:

public async Task<IActionResult> Create([Bind("IlceId,IlId,IlceAd")] Ilceler ilceler)
{
    // 新增这一行即可
    ModelState.Remove(nameof(Ilceler.Il));
    if (ModelState.IsValid)
    {
        // 原有逻辑不变
    }
    // 原有逻辑不变
}

内容的提问来源于stack exchange,提问作者dilem-ma-vi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:06:05