如何解决MVC3 Razor Engine执行/渲染顺序
| 我在_layout模板中有一些链接(登录,注销和注册),其中显示的链接取决于用户是否登录。像这样:if (User.Identity.IsAuthenticated)
{
<span class=\"username\">@User.Identity.Name</span>
<span class=\"link\">@Html.ActionLink(\"logout\",\"logout\",\"Account\")</span>
}
else
{
<span class=\"link\">@Html.ActionLink(\"Login\",\"Login\",\"Account\")</span>
<span class=\"link\">@Html.ActionLink(\"Register\",\"Register\",\"Account\")</span>
}
问题是,用户首次退出系统时仍会显示注销链接(我希望可以立即用登录名替换并注册链接)-直到刷新页面或用户移至另一页。这是注销操作代码:
public ActionResult logout()
{
FormsAuthentication.SignOut();
Session.Abandon();
return View();
}
我浏览了此链接-http://mvcdev.com/differences-between-asp-net-razor-and-web-forms-view-engines/-该链接说明了Razor引擎的执行顺序,但就我而言它的执行方式似乎有所不同。理想情况下,我希望FormsAuthentication.SignOut()在_layout中的User.Identity.IsAuthenticated之前执行。
我究竟做错了什么?谢谢!
解决方法
正常,您需要注销后进行重定向:
public ActionResult Logout()
{
FormsAuthentication.SignOut();
Session.Abandon();
return RedirectToAction(\"Index\");
}
发生这种情况的原因是,当客户端请求注销链接时,他仍然经过身份验证(他与请求一起发送了身份验证cookie)。然后在控制器操作中,您将他注销(FormsAuthentication.SignOut()
),此操作只不过是将身份验证Cookie标记为在后续请求中将其删除。然后,您返回一个视图,并且在该视图内当然仍会对用户进行身份验证,因为该视图在相同的请求下执行并且cookie仍然存在。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。