【问题标题】:How to use multiple Layout in MVC 3?如何在 MVC 3 中使用多个布局?
【发布时间】:2012-03-05 10:18:47
【问题描述】:

我有四种用户(客户、管理员、经理、教师)可以使用我未来的 ASP 网站...因此我必须为他们中的每一个创建不同的界面...

所以我的问题:

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

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

【问题讨论】:

    标签: c# asp.net-mvc-3


    【解决方案1】:

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

    [因为 _ViewStart.cshtml 允许我们编写代码,我们可以选择性地使我们的布局选择逻辑更丰富,而不仅仅是一个基本的属性集。]

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

    【讨论】:

      【解决方案2】:

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

      在我的 _Layout.cshtml 我有这个:

      @if (Request.IsAuthenticated && HttpContext.Current.User.IsInRole("Interviewer"))
                      {
                          <script type="text/javascript">
                              $("#logindisplay").show();
                          </script>
                          <li>@Html.ActionLink("Forside", "Index", "Home")</li>
                          <li>@Html.ActionLink("Spørgeskema", "Index", "Survey2")</li>
                          <li>@Html.ActionLink("Brugere", "Index", "UserAdministration")</li>
                          <li>@Html.ActionLink("Statistik", "Index", "Statistik")</li>
                          <li>@Html.ActionLink("Vagtplan", "Vagtplan", "Statistik")</li>
                      }
      
      @if (HttpContext.Current.User.IsInRole("Respondent"))
                          {
                               <li>@Html.ActionLink("Gammelt spørgeskema", "Index")</li>
                          }
      

      等等。

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

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

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

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

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

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

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

      【讨论】:

      • 但是,例如,您在哪里以及如何分配“面试官”角色?
      • 您可以通过 Visual Studio 执行此操作。我会上传一张图片,等一下。
      【解决方案3】:

      我在我的应用程序中使用 2 个布局 - 主(适用于所有用户)和管理员(适用于管理团队)。唯一的区别在于装饰 - 管理员没有横幅、徽标等...... 因此,您可以使用几个。但我会为客户、经理和老师留下一个。为它们使用不同的 CCS 文件以使外观独一无二

      【讨论】:

      • 感谢您的回复! +1
      【解决方案4】:

      我发现this answer 很棒。添加到它,如果您想根据控制器名称使用不同的布局,请尝试如下编辑方法:

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

      客户端控制器索引视图

      @{
      Layout = HtmlHelper.LayoutHelper(Request.RequestContext.RouteData, "~/views/shared/_layout1.cshtml");
      ViewBag.Title = "Clients";}  <h2>This is my view</h2>
      

      最后是新的 Layout2.cshtml

      <!DOCTYPE html><html><head> <meta name="viewport" content="width=device-width" /><title>@ViewBag.Title</title></head><body> This is my Layout2   <div>        RenderBody()</div></body></html>
      

      【讨论】:

        猜你喜欢
        • 2012-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-12
        • 2019-03-18
        相关资源
        最近更新 更多