如何在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配置
从那里,您可以创建角色并管理用户。
如果您的网站上有很多用户,那么从长远来看,您不希望这样做。 相反,当他们创建帐户时,您需要自动分配其角色。
您可以在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()