【问题标题】:How can I show error message in ASP.NET Core MVC?如何在 ASP.NET Core MVC 中显示错误消息?
【发布时间】:2021-02-03 22:36:43
【问题描述】:

我想在登录失败时显示错误消息。

这是我的 html 标记:

<form class="modal-content animate" action="/Login/SignInTeacher" method="post">
    @Html.AntiForgeryToken()
    <div class="imgcontainer">
        <span onclick="document.getElementById('id02').style.display='none'" class="close" title="Close Modal">&times;</span>
        <img src="~/images/Login4.png" alt="Avatar" class="img-fluid" style="height: 300px;">
    </div>

    <div class="container">
        <input type="text" class="form-control" name="Email" placeholder="Email Adresiniz" aria-label="Username" aria-describedby="basic-addon1" style="font-size: medium;">
        <br>
        <input type="password" class="form-control" name="Parola" placeholder="Şifreniz" aria-label="Username" aria-describedby="basic-addon1" style="font-size: medium;">
        <br>
        <button type="submit" class="btn btn-block btn-outline-success btn-lg">Login</button>
        <br>
        <label style="font-size: medium; margin-left: 0%;">
            <input type="checkbox" checked="checked" name="remember"> Remember me
        </label>
    </div>

    <div class="container" style="background-color:#f1f1f1">
        <button type="button" onclick="document.getElementById('id02').style.display='none'" class="btn btn-lg btn-danger">Cancel</button>
        <span class="psw">Forgot <a href="/Home/ForgetPassword/">password?</a></span>
    </div>
</form>

这是我的控制器代码

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> SignInTeacher(Teacher t)
{
    SHA1 sha = new SHA1CryptoServiceProvider();

    string willbeEncrypted = s.Parola;
    string encrypted = Convert.ToBase64String(sha.ComputeHash(Encoding.UTF8.GetBytes(willbeEncrypted)));

    var info = c.Teachers.FirstOrDefault(x => x.Email == s.Email && x.Parola == encrypted);

    if (info != null)
    {
        var claims = new List<Claim>
            {
                new Claim(ClaimTypes.Name,s.Email)
            };
        var userIdentity = new ClaimsIdentity(claims, "Login");

        ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(userIdentity);

        await HttpContext.SignInAsync(claimsPrincipal);

        var value = from deger in c.Teachers
                    where deger.Email == s.Email
                    select deger.Email;

        var nameuser = value;
           
        return RedirectToAction("Main", "Home", new { user = nameuser });
    }
        
    return RedirectToAction("Index", "Home");
}

用户登录成功后,主页面打开;当登录失败时,主页不会打开返回相同的页面(刷新),但我无法显示错误消息而不是像这样“用户名或密码错误”的页面刷新。

我用 viewbag 试过了,但是没有用,因为这个命令返回 RedirectToAction("Index", "Home"); 阻止了 viewbag 消息。

【问题讨论】:

  • 嗨@Knadre,关于这个案例的任何更新?

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

当登录失败时,主页不打开返回相同的页面(刷新),但我无法实现显示错误消息而不是像这样“用户名或密码错误”的页面刷新。

为了达到您的要求,您可以尝试通过TempData 传递错误消息,如下所示。

TempData["ErrorMes"] = "Username or password is wronng";

return RedirectToAction("Index", "Home");

在索引页面显示错误信息

<span class="text-danger">@TempData["ErrorMes"]</span>

【讨论】:

    【解决方案2】:

    我推荐使用 ModelState.AddModelError 如下,它会返回到相同的登录视图,模型错误并且模型状态将无效

    例子:

    if(isLoginSuccess)
    {
        return RedirectToAction("Main", "Home");
    }else
    {
        ModelState.AddModelError("InvalidLogin", "Invalid Login Attempt");
        return View(loginViewModel);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      相关资源
      最近更新 更多