Search code examples
c#asp.netvalidationasp.net-core-mvcasp.net-identity

Why does ValidationSummary not display User Validation failed?


Why does the console display validation errors but ValidationSummary does not display them? How to make ValidationSummary display User Validation failed?

photo of the console

RegisterView Code

@Html.ValidationSummary()

<h4>Name</h4>
@Html.TextBoxFor(model => model.Name)

<h4>Email</h4>
@Html.TextBoxFor(model => model.Email)

<h4>Pasword</h4>
@Html.TextBoxFor(model => model.Pasword)

<h4>ConfirmPasword</h4>
@Html.TextBoxFor(model => model.ConfirmPasword)

<h4>RememberMe</h4>
@Html.CheckBoxFor(model => model.RememberMe)

<button type="submit">Register</button>
photo of the Controller

Controller code

[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);
            var roleResult = await _UserManeger.AddClaimAsync(user, new Claim(ClaimTypes.Role, "User"));
            if (result.Succeeded & roleResult.Succeeded)
            {
                await _SignInManager.SignInAsync(user, isPersistent:false);
                return Redirect("https://localhost:7195/user");
            }
           
            return View(modle);
        }

Solution

  • If you cannot see the error when debugging, maybe try the code in your UserValidator as below:

                List<IdentityError> errors = new List<IdentityError>();
                if (userManager.FindByEmailAsync(user.Email) != null)
                {
                    errors.Add(new IdentityError { Code = "EmailFilad", Description = "Эта почта уже используется" });
                }
                if (errors.Count == 0)
                { return IdentityResult.Success; }
    
    
                else return IdentityResult.Failed(errors.ToArray());
    

    enter image description here

    If you want to see the error in the view, you can add below code in your Register action .

        [HttpPost]
        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);
            var roleResult = await _UserManeger.AddClaimAsync(user, new Claim(ClaimTypes.Role, "User"));
            if (result.Succeeded & roleResult.Succeeded)
            {
                await _SignInManager.SignInAsync(user, isPersistent:false);
                return Redirect("https://localhost:7195/user");
            }
           foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            return View(modle);
        }
    

    Result:

    enter image description here