如何在MVC 3中使用多个布局?

我有四种用户(客户,管理员,经理,老师)可以使用我未来的ASP网站…所以对于他们每个人我都要创建不同的界面……

所以我的问题:

  • 在MVC 3中使用不同的布局是否正确? 如果没有,我可以用什么来解决我的问题?

  • 如果在MVC 3中如何使用不同的布局是正确的? 你能给我一个或多个例子吗?

您可以通过测试用户的类型来以不同的方式显示页面

在我的_Layout.cshtml中我有这个:

@if (Request.IsAuthenticated && HttpContext.Current.User.IsInRole("Interviewer")) {  
  • @Html.ActionLink("Forside", "Index", "Home")
  • @Html.ActionLink("Spørgeskema", "Index", "Survey2")
  • @Html.ActionLink("Brugere", "Index", "UserAdministration")
  • @Html.ActionLink("Statistik", "Index", "Statistik")
  • @Html.ActionLink("Vagtplan", "Vagtplan", "Statistik")
  • } @if (HttpContext.Current.User.IsInRole("Respondent")) {
  • @Html.ActionLink("Gammelt spørgeskema", "Index")
  • }

    等等。

    您可以为每种角色创建不同的DisplayTemplate,并根据用户具有的角色显示这些角色。

    要手动将角色分配给不同的用户,请使用ASP.NET配置

    ASP.NET配置

    从那里,您可以创建角色并管理用户。

    如果您的网站上有很多用户,那么从长远来看,您不希望这样做。 相反,当他们创建帐户时,您需要自动分配其角色。

    您可以在AccountController中执行此操作,例如:

     if (createStatus == MembershipCreateStatus.Success) { Roles.AddUserToRole(model.UserName, "Respondent"); } .... 

    您的模型可以具有Role属性,而不是对其进行硬编码。

    我会为每个用户类别创建不同的_Layout.cshtml页面,并将_Layout选择逻辑放在_ViewStart.cshtml页面中。

    [因为_ViewStart.cshtml允许我们编写代码,所以我们可以选择使布局选择逻辑比基本属性集更丰富。

    http://weblogs.asp.net/scottgu/archive/2010/10/22/asp-net-mvc-3-layouts.aspx

    我在我的应用程序中使用了2个布局 – Master(适用于所有用户)和Admin(适用于管理员团队)。 唯一的区别在于装饰 – 管理员没有横幅,徽标等……所以,由你决定使用几个。 但我会留在客户,经理和老师的一个。 使用不同的CCS文件使外观独特

    我发现这个答案很棒。 添加它,如果你想根据控制器名称使用不同的布局,那么尝试编辑方法如下:

      public static string LayoutHelper(RouteData data, string defaultLayout = "") { if (data.Values["controller"].ToString() == "client") return "~/views/shared/_Layout2.cshtml"; return defaultLayout; } 

    Client Controller索引视图

     @{ Layout = HtmlHelper.LayoutHelper(Request.RequestContext.RouteData, "~/views/shared/_layout1.cshtml"); ViewBag.Title = "Clients";} 

    This is my view

    最后是新的Layout2.cshtml

      @ViewBag.Title This is my Layout2 
    RenderBody()