我对 MVC 很陌生,所以请帮助我了解如何执行以下操作。如您所知,当您创建新的 MVC5 项目时,它希望您在要登录时将登录页面用作单独的页面(即带有 ActionLink 的 _LoginPartial 视图到返回其视图的登录控制器)。
我想要完成的是在整个网站上都有登录表单(当用户尚未登录时)所以我做了以下更改:
_布局视图:
@Html.Partial("_LoginPartial")
_Login部分视图:
using (Html.BeginForm("Login", "Account", new { ReturnUrl = Request.QueryString["ReturlUrl"] }, FormMethod.Post, new { @class = "navbar-form navbar-right form-inline", role = "form" }))
{
@Html.AntiForgeryToken()
<div class="form-group">
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control input-sm", placeholder = "Username" })
@Html.PasswordFor(m => m.Password, new { @class = "form-control input-sm", placeholder = "Password" })
</div>
<input type="submit" value="Log in" class="btn btn-default btn-sm" />
}
当用户名/密码存在时,它看起来工作正常,当在 QueryString 中找不到 ReturnUrl 时,它会登录用户并将他重定向到主页。但是,当登录失败时,它会将原始登录视图加载为单独的页面,因为登录控制器返回其完整视图:
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
我不想要那个。我想在所有页面上都有登录表单,并且能够从任何页面登录,并且只在用户当前所在的页面上显示错误,而不是将他重定向到原始登录页面。如果不使用 javascript/ajax,我将如何做到这一点?
非常感谢!