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

ValidationSummary不显示用户验证失败错误的解决方法

问题原因

控制台能输出验证错误但ValidationSummary不显示,核心原因有两个:

  • ValidationSummary控件只会从ModelState字典中读取并渲染错误信息。当前控制器代码中,_UserManeger.CreateAsync、_UserManeger.AddClaimAsync返回的身份操作错误,仅被框架输出到调试控制台,没有手动添加到ModelState中,控件无法获取到对应内容。
  • 需要展示的“User Validation failed”属于全局模型级错误,这类错误需要将错误键设为空字符串添加到ModelState,才能被ValidationSummary识别,当前代码没有做这一步处理。
配置方法

按以下两步修改即可:

  1. 修改控制器Post注册逻辑,将操作失败的全局提示和具体错误添加到ModelState,同时修正原代码中按位与&的写法错误(应使用逻辑与&&),优化创建用户失败后仍执行添加角色逻辑的空引用风险,修改后的控制器代码如下:
[HttpPost("Register")]
public async Task<ActionResult> Register(RegisterViewModle modle)
{ 
    if (!ModelState.IsValid) { return View(modle); }
    var user = new ApplicationUser { Email = modle.Email, UserName = modle.Name };
    var result = await _UserManeger.CreateAsync(user, modle.Pasword);
    if (result.Succeeded)
    {
        var roleResult = await _UserManeger.AddClaimAsync(user, new Claim(ClaimTypes.Role, "User"));
        if (roleResult.Succeeded)
        {
            await _SignInManager.SignInAsync(user, isPersistent:false);
            return Redirect("https://localhost:7195/user");
        }
        // 添加角色失败时写入全局提示和具体错误
        ModelState.AddModelError(string.Empty, "User Validation failed");
        foreach (var error in roleResult.Errors)
        {
            ModelState.AddModelError(string.Empty, error.Description);
        }
    }
    else
    {
        // 创建用户失败时写入全局提示和具体错误
        ModelState.AddModelError(string.Empty, "User Validation failed");
        foreach (var error in result.Errors)
        {
            ModelState.AddModelError(string.Empty, error.Description);
        }
    }
    return View(modle);
}
  1. 调整视图中ValidationSummary的参数配置,确保全局错误可以正常显示:
    • 如果需要同时显示字段属性验证错误和全局提示,保持写法为@Html.ValidationSummary(false)即可
    • 如果只想显示“User Validation failed”这类全局提示,不显示单个字段的校验错误,修改为@Html.ValidationSummary(true)
    • 可以自定义错误提示的样式,比如添加Bootstrap错误样式类:@Html.ValidationSummary(false, "", new { @class = "text-danger" })

补充说明:ModelState.AddModelError的第一个参数传入空字符串时,标记的是模型级全局错误,这类错误不会绑定到单个表单字段,只会被ValidationSummary渲染展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:21:40