在我们的ASP.NET核心应用程序中,我们有几个角色,我们希望每个角色都有自己的布局,为此,我们想出了为每个角色分别布局的想法:
~/Views/Shared/Layouts/_DefaultLayout.cshtml
~/Views/Shared/Layouts/_Role_1_Layout.cshtml
~/Views/Shared/Layouts/_Role_2_Layout.cshtml
~/Views/Shared/Layouts/_Role_3_Layout.cshtml
~/Views/Shared/Layouts/_Role_4_Layout.cshtml
要在这些角色之间切换,我们会将~/Views/_ViewStart.cshtml
修改为:
@{
if (this.User.IsInRole("Role1"))
{
Layout = "~/Views/Shared/Layouts/_Role_1_Layout.cshtml";
}
else if (this.User.IsInRole("Role2"))
{
Layout = "~/Views/Shared/Layouts/_Role_2_Layout.cshtml";
}
// ....
else
{
Layout = "~/Views/Shared/_DefaultLayout.cshtml";
}
}
这首先适用,但当我使用例如Role1
的其他用户登录时,它不会将当前布局切换为使用_Role_1_Layout.cshtml
,而是显示空白页面。
有什么想法吗?
答案 0 :(得分:1)
看起来你适合'其他',但路径上有错误?
Layout =“〜/ Views / Shared / _DefaultLayout.cshtml”;
可能应该是:
Layout =“〜/ Views / Shared / Layouts / _DefaultLayout.cshtml”;
我这不是您问题的原因,您可以与您的代码或至少工作示例共享回购吗?
答案 1 :(得分:0)
只需将Layout设置为布局的名称,而不是布局的路径:
if (this.User.IsInRole("Role1"))
{
Layout = "_Role_1_Layout";
}
....