是否可以修改列表中特定对象对应的ModelStateError?
实现方案
完全可以实现,核心思路是匹配集合绑定对应的ModelState Key前缀,批量删除指定索引下的所有校验错误。
ASP.NET Core绑定数组/列表类型参数时,ModelState的Key会统一使用参数名[索引].属性名的格式,你可以按以下代码实现:
for (int i = 0; i < cars.Count; i++) { if (cars[i].IsDeleted) { // 拼接当前车辆对应的ModelState Key前缀,参数名如果不是cars请自行替换 string keyPrefix = $"cars[{i}]."; // 先查询所有匹配的Key,转成列表后再操作,避免枚举时修改集合报错 var keysToRemove = ModelState.Keys .Where(k => k.StartsWith(keyPrefix)) .ToList(); foreach (string key in keysToRemove) { // 直接移除对应Key的所有错误和状态 ModelState.Remove(key); // 如果只需要清除校验错误、保留字段原始值,可以换成下面的方法 // ModelState.ClearValidationState(key); } } }
注意事项
- 如果你不确定当前项目的ModelState Key生成规则,可以打断点查看
ModelState.Keys的实际值调整前缀匹配逻辑 - 如果接口接收的汽车列表参数名不是
cars,需要把代码里的cars替换为实际的参数名
内容的提问来源于stack exchange,提问作者Frodo
相关产品推荐
相关产品推荐

