三大块:

    • LoginViewModel
    • Login 视图
    • Login 操作方法

    ViewModel:

    1. public class LoginViewModel
    2. {
    3. [Required]
    4. [EmailAddress]
    5. [Display(Name = "邮箱地址")]
    6. public string Email { get; set; }
    7. [Required]
    8. [DataType(DataType.Password)]
    9. [Display(Name = "密码")]
    10. public string Password { get; set; }
    11. [Display(Name = "记住我")]
    12. public bool RememberMe { get; set; }
    13. }

    Login 视图:

    1. @model LoginViewModel
    2. @{
    3. ViewBag.Title = "用户登录";
    4. }
    5. <h1>用户登录</h1>
    6. <div class="row">
    7. <div class="col-md-12">
    8. <form method="post">
    9. <div asp-validation-summary="All" class="text-danger"></div>
    10. <div class="form-group">
    11. <label asp-for="Email"></label>
    12. <input asp-for="Email" class="form-control" />
    13. <span asp-validation-for="Email" class="text-danger"></span>
    14. </div>
    15. <div class="form-group">
    16. <label asp-for="Password"></label>
    17. <input asp-for="Password" class="form-control" />
    18. <span asp-validation-for="Password" class="text-danger"></span>
    19. </div>
    20. <div class="form-group">
    21. <div class="custom-checkbox">
    22. <label asp-for="RememberMe">
    23. <input asp-for="RememberMe"/>@Html.DisplayNameFor(m => m.RememberMe)
    24. </label>
    25. </div>
    26. </div>
    27. <button type="submit" class="btn btn-primary">登录</button>
    28. </form>
    29. </div>
    30. </div>

    Login 操作方法:

    1. [HttpGet]
    2. public IActionResult Login()
    3. {
    4. return View();
    5. }
    6. [HttpPost]
    7. public async Task<IActionResult> Login(LoginViewModel model)
    8. {
    9. if (ModelState.IsValid)
    10. {
    11. var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, false);
    12. if (result.Succeeded)
    13. {
    14. return RedirectToAction("Index", "Home");
    15. }
    16. ModelState.AddModelError(string.Empty, "登录失败,请重试");
    17. }
    18. return View(model);
    19. }