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

ASP.NET Core如何获取无效ModelState条目对应的Key值

问题描述

在.NET 5/ASP.NET MVC应用的「编辑」页面中,当ModelState.IsValid为false时,需要在返回页面前逐个检查校验错误,核心需求是获取ModelState列表中无效条目的对应名称。

示例场景

  • 处理方法:public async Task<IActionResult> OnPostAsync()
  • 当if (!ModelState.IsValid)返回false时,this.ModelState.Values[0]信息为SubKey={ID}, Key="ID", ValidationState=Invalid Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry {Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ModelStateNode}

报错说明

编写的代码运行时报错CS1061,提示'ModelStateEntry'不包含'Key'的定义,报错代码如下:

foreach (ModelStateEntry item in ModelState.Values)
{
    if (item.ValidationState == ModelValidationState.Invalid)
    {
        // 若无效条目包含字符串"ID"我需要做特殊处理
        var name = item.Key;  // CS1061报错
        ...
解决方案

核心问题是此前错误遍历了ModelState.Values,改为遍历ModelState本身的键值对即可获取所需信息。

方案1

foreach (KeyValuePair<string, ModelStateEntry> modelStateDD in ModelState) 
{
    string key = modelStateDD.Key;
    ModelStateEntry item = ModelState[key];
    if (item.ValidationState == ModelValidationState.Invalid) {
        // 根据Key执行对应操作
        if (key.Contains("ID"))
           ...

方案2

var errors = ModelState
               .Where(x => x.Value.Errors.Count > 0)
               .Select(x => new { x.Key, x.Value.Errors })
               .ToList();
foreach (var error in errors) {
    if (error.Key.Contains("ID"))
       continue;
    else if (error.Key.Contains("Foo"))
      ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:09:02