ModelState IsValid returns False 使用 ASP.NET Core 5 MVC Identity with UserName

ModelState IsValid returns False Using ASP.NET Core 5 MVC Identity with UserName

我正在尝试使用用户名而不是电子邮件登录来完成登录功能。

我正在使用 Bootstrap 模式对话框登录用户,jquery 和 ajax 用于错误处理。

UserName 不是电子邮件地址,因此 ModelState IsValid 始终 returns false。如果我在 javascrip 文件中硬编码一个电子邮件地址,那么一切正常。

有没有关于这个问题的。任何帮助将不胜感激。

    <div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
  <div class="modal-header">
    <h5 class="modal-title" id="exampleModalLabel">Login</h5>
    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  </div>
  <div class="modal-body">
    <form id="UserLoginForm" asp-controller="UserAuth" asp-action="login">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <input type="hidden" asp-for="LoginInValid" />
        <div class="form-group row mb-3">
            <label asp-for="UserName" class="col-md-4 col-form-label"></label>
            <div class="col-md-8">
                <input asp-for="UserName" placeholder="User Name" class="form-control" />
                <span asp-validation-for="UserName" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group row mb-3">
            <label asp-for="Password" class="col-md-4 col-form-label"></label>
            <div class="col-md-8">
                <input asp-for="Password" placeholder="Password" class="form-control" />
                <span asp-validation-for="Password" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group-row">
            <div class="col-md-8 offset-md-4">
                <div class="form-check">
                    <input asp-for="RememberMe" class="form-check-input" />
                    <label asp-for="RememberMe" class="col-md-4" col-form-label"></label>
                </div>
            </div>
        </div>
    </form>
  </div>
  <div class="modal-footer">
    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
    <button type="button" id="login" name="login" class="btn btn-primary">Login</button>
  </div>
</div>
 [AllowAnonymous]
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login(LoginModel loginModel)
    {
        loginModel.LoginInValid = "true";

        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(loginModel.UserName, loginModel.Password, loginModel.RememberMe, lockoutOnFailure: false);

            if (result.Succeeded)
            {
                loginModel.LoginInValid = "";
            }
            else
            {
                ModelState.AddModelError(string.Empty, "Invalid login attempt");
            }
        }
        return PartialView("_UserLoginPartial", loginModel);
    }

不显示错误处理

(function () {
    var userloginButton = $("#UserLoginModal button[name='login']").click(onUserLoginClick);

    function onUserLoginClick() {

        var url = "UserAuth/Login";

        var antiForgeryToken = $("#UserLoginModal input[name='__RequestVerificationToken']").val();

        var username = $("#UserLoginModal input[name = 'UserName']").val();
        var email = "mydomain.com"
        /*var email = $("#UserLoginModal input[name = 'Email']").val();*/
        var password = $("#UserLoginModal input[name = 'Password']").val();
        var rememberMe = $("#UserLoginModal input[name = 'RememberMe']").prop('checked');

        var userInput = {
            __RequestVerificationToken: antiForgeryToken,
            UserName: username,
            Email: email,
            Password: password,
            RememeberMe: rememberMe
        };
    }
});    

登录模型

public class LoginModel
{
    [Required]
    [Display(Name = "User Name")]
    [StringLength(25, MinimumLength = 2)]
    public string UserName { get; set; }

    [Required]
    [StringLength(100, MinimumLength = 2)]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    [StringLength (100, MinimumLength = 2)]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    public bool RememberMe { get; set; }

    public string LoginInValid { get; set; }
}

LoginModel 的 UserName、Email 和 Password 都标记为“必需”,因此除非提供所有,否则 ModelState 将无效。

您需要为其中的每一个提供值(我在您的 HTML 标记中没有看到任何电子邮件输入),或者从您不需要的 LoginModel 属性中删除 [Required] 注释想提供。