所以情况就是这样,我有一个loginpartial.cshtml,我把它放在RenderAction
的页面上
此loginpartial包含IsAuthenticated
,如果用户未经过身份验证,则会显示登录表单。
其次,我有一个管理页面,其中包含一些字段,如firstname等。 当我按下保存按钮时,它可以很好地保存到数据库中。但是,登录表单也会被调用,我不知道为什么。
layout.cshtml:
@{Html.RenderAction("Login", "User");}
LoginPartial.cshtml:
<div class="nav navbar-nav navbar-right">
@if (User.Identity.IsAuthenticated)
{
<div>No login</div>
}
else
{
using (Html.BeginForm("Login", "User", FormMethod.Post))
{
@Html.AntiForgeryToken();
@Html.ValidationSummary(true, "Login failed.")
<div class="Login">
//fields here
</div>
}
}
</div>
UserController登录:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(User user)
{
if (ModelState.IsValid)
{
if (isValid(user.Email, user.Password))
{
using (MVCV2DbContext MVCV2DbContext = new MVCV2DbContext())
{
var users = MVCV2DbContext.Users.Single(u => u.Email == user.Email);
FormsAuthentication.SetAuthCookie(users.ID.ToString(), false);
//FormsAuthentication.SetAuthCookie(user.Email, false);
}
return RedirectToAction("Index", "User");
}
}
return View(user);
}
manage.cshtml:
using (Html.BeginForm("Manage", "User", FormMethod.Post))
{
@Html.AntiForgeryToken();
@Html.ValidationSummary(true, "Not all good")
<div>
//fields here
</div>
}
usercontroller manage:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Manage(User_Details users)
{
if (ModelState.IsValid)
{
int U_ID = Convert.ToInt32(GetUserIDFromCookie());
using (MVCV2DbContext MVCV2DbContext = new MVCV2DbContext())
{
var user = MVCV2DbContext.User_Details.SingleOrDefault(u => u.User_ID == U_ID);
if (user != null)
{
user.User_FirstName = users.User_FirstName;
user.User_Insertions = users.User_Insertions;
user.User_LastName = users.User_LastName;
MVCV2DbContext.SaveChanges();
}
}
}
return View();
}
答案 0 :(得分:0)
@{Html.RenderAction("Login", "User");}
布局文件中的
将在呈现视图时调用action方法
你可以通过移动
解决这个问题if(User.Identity.IsAuthenticated) ... don't run auth code
离开视图并进入布局视图或控制器(对IsAuthenticated测试进行适当更改)
答案 1 :(得分:0)
而不是if(User.Identity.IsAuthenticated)
尝试Request.IsAuthenticated
你的调试说法是什么?