ASP.NET Core登录页:如何在账号密码错误时显示错误提示?
登录页面错误提示实现方案
步骤1:在Controller中添加错误信息
修改AccountController的[HttpPost] Login方法,在用户名不存在或密码错误时,通过ModelState注入错误提示,并返回带用户输入模型的View(保留已输入的用户名,避免重复输入):
[HttpPost] public IActionResult Login(ManagerAccount m) { var getUser = db.ManagerAccounts.SingleOrDefault(i => i.Username == m.Username); if (getUser != null) { if (getUser.Password == m.Password) { return View("~/Views/Home/Index.cshtml"); } else { ModelState.AddModelError(string.Empty, "用户名或密码错误"); return View(m); } } else { ModelState.AddModelError(string.Empty, "用户名或密码错误"); return View(m); } }
注:为避免泄露账号存在性信息,建议统一使用“用户名或密码错误”的提示;如果需要区分具体错误,可以分别添加字段级提示,比如
ModelState.AddModelError("Password", "密码不正确")。
步骤2:在Login视图中展示错误信息
修改Login.cshtml,在表单上方添加验证摘要组件,用于渲染错误提示:
@model ESchool.Models.ManagerAccount @{ ViewData["Title"] = "Sign in"; } <div class="p-3 mb-2 bg-dark text-white">Ad</div> <div class="card"> <article class="card-body"> <h4 class="card-title mb-4 mt-1">Sign in</h4> <!-- 全局错误提示 --> @Html.ValidationSummary(false, "", new { @class = "alert alert-danger" }) <form action="/Account/Login" method="post"> <div class="form-group"> <label>Username:</label> @Html.TextBoxFor(m => m.Username, new { @class = "form-control" }) <!-- 可选:用户名字段单独错误提示 --> @Html.ValidationMessageFor(m => m.Username, "", new { @class = "text-danger" }) </div> <div class="form-group"> <label>Password:</label> <!-- 优化:将密码输入框设为password类型,隐藏明文 --> @Html.TextBoxFor(m => m.Password, new { @class = "form-control", type = "password" }) <!-- 可选:密码字段单独错误提示 --> @Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" }) </div> <div class="form-group"> <button type="submit" class="btn btn-primary btn-block">Login</button> </div> </form> </article> </div>
补充说明
ModelState.AddModelError第一个参数传string.Empty时,错误会显示在全局的ValidationSummary中;指定字段名(如"Username"),则可以通过ValidationMessageFor针对单个字段展示错误。- 返回
View(m)而非View("Login"),可以保留用户已输入的表单数据,提升登录体验。
内容的提问来源于stack exchange,提问作者Emir
相关产品推荐
相关产品推荐

