如何从登录用户单击“页脚菜单”时隐藏登录的布局

时间:2017-09-22 04:22:23

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我有" LoggedIn用户"和"非登录用户"像下面的东西。

@if (!Request.IsAuthenticated)
{
    Layout = "~/Views/Shared/_Layout.cshtml";

}
else if (User.IsInRole("Candidate"))
{
    Layout = "~/Views/Shared/_LoggedInLayout.cshtml";
}
else if (User.IsInRole("Referrer"))
{
    Layout = "~/Views/Shared/_ReferrerLayout.cshtml";
}

现在,当用户登录并访问任何页面时,我会显示Left Nav Bar Partial View with some 5-6 menu items

enter image description here

此外,就像其他任何网站一样,我也将页脚设为"AboutUs" "Terms and Condition"

问题:

现在,当登录用户点击任何页脚选项时,即使在这种情况下,也会显示左侧导航栏菜单项。显示它的原因是因为用户已登录。但如果用户单击“页脚菜单项”,我不想显示任何“左侧导航栏菜单选项”。假设登录用户点击"关于我们"从页脚,我希望它的行为方式相同,就像非登录用户点击一样。

预期行为:整个页面的呈现方式应与单击未登录用户的方式相同。不应显示左侧导航栏菜单项。示例网站:I want a behaviour just like this web site

当前行为:

enter image description here

预期行为:

enter image description here

我的About.cshtml

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

This is About us page.

1 个答案:

答案 0 :(得分:4)

在视图中指定布局将覆盖设置的任何内容,例如Views/_ViewStart.cshtml文件。所以,这应该是你所需要的:

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>

This is About us page.

覆盖整个View文件夹的视图

如果特定控制器的所有视图都使用某个视图,您还可以将_ViewStart.cshtml文件添加到该控制器的Views文件夹中。

例如,如果您有一个FooController,其中包含Views/Foo个文件夹,则可以在其中添加_ViewStart.cshtml文件以使所有这些视图都可以使用_FooLayout.cshtml(或其他)。其他任何东西仍将使用你的全球&#34; _ViewStart.cshtml文件指示。

如果你向MVC项目添加一个区域,你可以看到这个的实际应用;模板化代码将在该区域内添加_ViewStart,因为它更本地化,将覆盖非区域_ViewStart。