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

如何让ValidationSummary一次性展示所有验证错误信息

根本原因

ASP.NET MVC 默认的验证执行逻辑是先运行所有属性级验证(比如[Required]等数据注解规则),只有属性级验证全部通过后,才会执行实现了IValidatableObject接口的对象级Validate方法,这就是错误分批次展示的核心原因。

解决方案

你只需要在控制器的处理Action中手动触发对象级验证,把自定义验证的结果提前加入ModelState,就能实现所有错误一次性展示:

[HttpPost]
public ActionResult 你的业务处理方法(你的模型类 model)
{
    // 手动执行全量验证(同时包含属性级验证+对象级自定义验证)
    var validationContext = new ValidationContext(model);
    var allValidationResults = new List<ValidationResult>();
    // validateAllProperties设为true时会强制执行所有层级的验证规则
    Validator.TryValidateObject(model, validationContext, allValidationResults, validateAllProperties: true);
    
    // 将所有自定义验证结果同步到ModelState中
    foreach (var result in allValidationResults)
    {
        if (result.MemberNames.Any())
        {
            foreach (var memberName in result.MemberNames)
            {
                ModelState.AddModelError(memberName, result.ErrorMessage);
            }
        }
        else
        {
            // 没有关联属性的全局错误直接加入空键
            ModelState.AddModelError(string.Empty, result.ErrorMessage);
        }
    }

    if (!ModelState.IsValid)
    {
        // 返回视图时ModelState已经包含所有层级的错误
        return View(model);
    }

    // 后续正常业务逻辑
}

额外说明

你当前使用的@Html.ValidationSummary(false, "", new { @class = "text-danger" })第一个参数为false,本身已经配置为同时展示属性错误和全局错误,不需要修改。如果需要前端也实现一次性校验所有规则,只需额外为自定义验证规则编写jQuery Validate适配代码,让客户端也能同时触发属性校验和自定义规则校验即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:36:01