我正在尝试在部分视图上创建登录,而无需在有人登录时刷新整个浏览器。
登录控制器工作正常,并且选择确定以后必须显示的部分视图。问题是此部分View未检测到用户已记录。
如果我刷新网页(F5),我可以看到用户就像我说的那样,记录良好。
的Controler:
[AllowAnonymous]
public ActionResult Login() {
return PartialView("_Login");
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl) {
if(ModelState.IsValid) {
if(WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe.Value)) {
return PartialView("LogOnPartialView", "Shared");
}
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
return View(model);
}
部分视图_login
@using (Ajax.BeginForm("Login", "Account", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "loginControl" }))
{
@Html.AntiForgeryToken()
<div class="form-field">
@Html.EditorFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="form-field">
@Html.EditorFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<input type="submit" value="Login" />
}
部分查看LogOnPartialView
@if (HttpContext.Current.User.Identity.IsAuthenticated)
{
<div>user is logged</div>
}
else
{
<div>user is NOT logged</div>
}
@if(!Request.IsAuthenticated)
{
@Html.ActionLink("Registro", "Register", "Account")
@: |
@Ajax.ActionLink("Login", "Login", "Account", new AjaxOptions { UpdateTargetId = "Login" })
}
else
{
@: Welcome <b>@User.Identity.Name</b>!
@: |
@Html.ActionLink("Logout", "LogOff", "Account")
}
有人可以帮帮我吗?
答案 0 :(得分:2)
我怀疑你是否会以目前的形式开展工作。如果您阅读the docs,则说明
当用户登录时,ASP.NET会在cookie中设置一个身份验证令牌,让ASP.NET知道用户已登录的后续请求。
请注意使用“后续请求”一词。
在同一请求中使用它的问题是传入请求不发送了auth cookie,因此IsAuthenticated
为false。
即。
Login
Set-Cookie
这就是你点击F5时它起作用的原因
解决此问题的方法是调用WebSecurity.Login
调用结果,指示用户是否已成功登录并将传递给LogOnPartialView