我有" 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
。
此外,就像其他任何网站一样,我也将页脚设为"AboutUs" "Terms and Condition"
。
问题:
现在,当登录用户点击任何页脚选项时,即使在这种情况下,也会显示左侧导航栏菜单项。显示它的原因是因为用户已登录。但如果用户单击“页脚菜单项”,我不想显示任何“左侧导航栏菜单选项”。假设登录用户点击"关于我们"从页脚,我希望它的行为方式相同,就像非登录用户点击一样。
预期行为:整个页面的呈现方式应与单击未登录用户的方式相同。不应显示左侧导航栏菜单项。示例网站:I want a behaviour just like this web site
当前行为:
预期行为:
我的About.cshtml
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
This is About us page.
答案 0 :(得分:4)
在视图中指定布局将覆盖设置的任何内容,例如Views/_ViewStart.cshtml
文件。所以,这应该是你所需要的:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
This is About us page.
如果特定控制器的所有视图都使用某个视图,您还可以将_ViewStart.cshtml
文件添加到该控制器的Views文件夹中。
例如,如果您有一个FooController
,其中包含Views/Foo
个文件夹,则可以在其中添加_ViewStart.cshtml
文件以使所有这些视图都可以使用_FooLayout.cshtml
(或其他)。其他任何东西仍将使用你的全球&#34; _ViewStart.cshtml
文件指示。
如果你向MVC项目添加一个区域,你可以看到这个的实际应用;模板化代码将在该区域内添加_ViewStart,因为它更本地化,将覆盖非区域_ViewStart。