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
相关产品推荐
相关产品推荐

