几个侧边栏的几个共享布局

时间:2015-10-23 10:43:29

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

所以我是MVC 4的新手,我正在考虑我该怎么做。

当前代码

我为每种类型的用户制作了几个SHARED布局。所以我现在有,管理员侧栏的_AdminLayout.cshtml,Faculty的_FacultyLayout.cshtml和_StudentLayout.cshtml

问题

我有几种类型的用户:管理员,学生和教师。边栏的内容根据登录的用户类型而变化。

还有其他解决方案吗?

我计划将所有侧边栏放在一个共享布局中,但MVC 4没有用于共享布局的控制器,这与Web窗体母版页不同,有一个Codebehind文件。我只是想缩短我的代码并减少我目前拥有的 3 SHARED LAYOUTS 之间的冗余。

1 个答案:

答案 0 :(得分:0)

您可以使用一个单一布局,并使用@Html.Action()将侧边栏渲染为部分视图,具体取决于用户的角色。这可以放在所有其他控件继承的BaseController中,或者放在单独的控制器中(比方说)LayoutController

[ChildActionOnly]
public ActionResult SideBar()
{
  var role = ... // your code for getting the users role
  if (role == "Admin")
  {
    return PartialView("_AdminSideBar");
  }
  else if (role == "Faculty")
  {
    return PartialView("_FacultySideBar");
  }
  else if ..........
}

然后创建关联的部分视图_AdminSideBar.cshtml_FacultySideBar.cshtml等。

然后在布局页面

......
<div id="sidebar">
  @{ Html.RenderAction("", ""); }
</div>