ASP.NET MVC与Web API登录错误参数无警告问题求助
解决登录错误提示不显示的问题
问题分析
你的代码存在两个核心问题导致错误提示无法正常展示:
- 视图中错误存在性的判断逻辑错误,依赖检查空键是否存在而非直接判断
ModelState是否包含错误 ValidationSummary的参数配置不正确,无法正确渲染全局错误信息
修复步骤
1. 修改视图中的错误显示逻辑
将登录表单内的错误判断代码替换为以下内容,直接通过ModelState.IsValid判断是否存在错误,并调整ValidationSummary参数确保全局错误正常显示:
@if (!ModelState.IsValid) { <div class="alert alert-danger mt-3" role="alert"> @Html.ValidationSummary(false, null, new { @class = "text-danger mb-0" }) </div> }
ValidationSummary第一个参数设为false,表示同时显示属性级和全局级错误;若只想显示你添加的全局错误,可设为true- 移除多余的空字符串参数,避免干扰错误渲染逻辑
2. 启用客户端验证(可选但推荐)
若需要实现客户端实时验证,在Scripts区域添加验证脚本引用:
@section Scripts { <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> <script> $(document).ready(function () { $('#toggleToken').click(function () { $('#tokenContent').slideToggle(); }); }); </script> }
3. 控制器代码优化(可选)
在API返回失败的分支中,显式添加return View(model);让逻辑更清晰(原代码可正常运行,但显式返回更易维护):
else { ModelState.AddModelError("", "Kullanıcı adı veya şifre hatalı."); ViewData["ErrorMessage"] = "Kullanıcı adı veya şifre hatalı."; return View(model); }
修改后的完整视图错误显示片段
@using (Html.BeginForm("Login", "Account", FormMethod.Post)) { <div class="form-group"> @Html.LabelFor(m => m.ADI) @Html.TextBoxFor(m => m.ADI, new { @class = "form-control" }) </div> <div class="form-group"> @Html.LabelFor(m => m.SOYADI) @Html.TextBoxFor(m => m.SOYADI, new { @class = "form-control" }) </div> <div class="form-group"> @Html.LabelFor(m => m.KULLANICI_ADI) @Html.TextBoxFor(m => m.KULLANICI_ADI, new { @class = "form-control" }) </div> <div class="form-group"> @Html.LabelFor(m => m.SIFRE) @Html.PasswordFor(m => m.SIFRE, new { @class = "form-control" }) </div> <button type="submit" class="btn btn-primary">Login</button> @* 修改后的错误显示区域 *@ @if (!ModelState.IsValid) { <div class="alert alert-danger mt-3" role="alert"> @Html.ValidationSummary(false, null, new { @class = "text-danger mb-0" }) </div> } }
内容的提问来源于stack exchange,提问作者Göksu Ünsal
相关产品推荐
相关产品推荐

