如何检查用户是否从MVC5布局文件登录

时间:2016-02-01 12:53:07

标签: asp.net-mvc-5

我有一个MVC 5站点,使用共享的_Layout视图。 在这个_Layout视图中,我将我的脚本渲染到底部,在正文之后。

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryui")
    @*BootStrap must be loaded after JQuery UI in order to override the tooltip function*@
    @Scripts.Render("~/bundles/bootstrap")
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/Session")

我现在的问题是,我想在每个页面中包含Session Bundle,但我的登录页面除外。 换句话说,我只想将Session Bundle用于用户登录的页面,并且他们有一个活动的会话。

如何在_Layout视图中检查此条件并有条件地渲染脚本渲染?

在其他页面中,我会在模型中添加一个bool字段,然后使用C#If构造只渲染Script部分,如果为true,但我的_Layout视图中没有模型。

我也使用自定义,非常简单的登录方法,因此我没有使用MVC5的Identity Framework。

修改 我被建议使用Request对象

@if (Request.IsAuthenticated) { @Render...}

这不起作用,因为我使用自定义登录,这不适用于内置框架。 我在这里了解了这个字段的工作原理How does Request.IsAuthenticated work?

问题仍未解决

2 个答案:

答案 0 :(得分:8)

@if (Request.IsAuthenticated)
{
   // Render stuff for authenticated user
}

答案 1 :(得分:0)

我找到了答案。

access session variable from layout page ASP.NET MVC3 RAZOR

我可以从布局中访问Session对象。使用它,我可以检查我的自定义身份验证对象是否为空。如果它不为null,则用户登录

@if (Session["BrugerSession"] != null)
{
    @Scripts.Render("~/bundles/Session")
}