C# 当用户担任两个角色(例如管理员和服务用户)时,如何切换布局

C# 当用户担任两个角色(例如管理员和服务用户)时,如何切换布局,c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,我想根据两个角色中的用户切换布局,一个是管理员,另一个是服务用户,当用户登录时,我在我的页面上有下拉菜单,在下拉菜单中,当用户以管理员身份登录时,我有选项“切换到用户模式”,当用户以服务用户身份登录时,我有选项“切换到管理员模式”,如果需要单击按钮切换布局,则有两个选项: 将该按钮作为指向当前页面的链接,并向查询字符串添加内容,例如?mode=user。然后,您可以在视图中切换布局(或\u ViewStart.cshtml),如下所示: 让按钮转到URL或将表单发布到由操作提供的URL,然后该

我想根据两个角色中的用户切换布局,一个是管理员,另一个是服务用户,当用户登录时,我在我的页面上有下拉菜单,在下拉菜单中,当用户以管理员身份登录时,我有选项“切换到用户模式”,当用户以服务用户身份登录时,我有选项“切换到管理员模式”,

如果需要单击按钮切换布局,则有两个选项:

  • 将该按钮作为指向当前页面的链接,并向查询字符串添加内容,例如
    ?mode=user
    。然后,您可以在视图中切换布局(或
    \u ViewStart.cshtml
    ),如下所示:

  • 让按钮转到URL或将表单发布到由操作提供的URL,然后该操作将设置会话变量。然后,可以基于会话变量在视图中分支布局,类似于上面的代码


  • 选项2更持久。使用选项1,您必须将查询字符串param传递给link-to-link,否则布局将切换回原来的位置。但是,如果您只希望开关影响当前视图,那么这可能是您想要的。通过设置会话变量,布局选项将一直保留,直到会话过期或您将其更改为其他内容。

    我猜每个角色都有不同的操作和视图,因此我建议您也将它们划分为多个区域。 通过这种方式,您可以实现几件事:

  • 您的解决方案构造得更好
  • 每个区域负责一个角色
  • 每个区域都有自己的URL(如:site.com/Admin、site.com/User)
  • 每个区域都有其控制器/视图/布局
  • 您可以在区域之间共享控制器/视图/资源

  • 所以现在你可以有一些全局布局,用户可以在其中选择她的模式。你所要做的就是将她重定向到正确的区域控制器

    您可以使用_ViewStart.cshtml文件在该文件中添加您的条件,并相应地设置布局页面。否!我想如果在我的下拉菜单中点击“切换到用户模式”选项,我必须切换到用户模式,因为我是管理员和用户
    Layout = "~/Views/Shared/_Layout.cshtml";
    if (Request["mode"] == "user")
    {
        Layout = "~/Views/Shared/_UserLayout.cshtml";
    }