是否可以在基于路由的MVC4中使用不同的布局?

Sot*_*ist 6 asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-4

我有一个单独的部分(路线)我的网站,我想使用不同的布局/ CSS等.

因此,当我的网站主要部分的用户获得默认布局时.但是当他们登录并进入商店时,商店部分(路线)使用不同的布局/ css.

所以...

  • www.blahblahblah.com/
  • www.blahblahblah.com/admin/
  • www.blahblahblah.com/home/contactus/

...都使用默认的_Layout

但...

  • www.blahblahblah.com/store/
  • www.blahblahblah.com/store/admin/

...使用_LayoutStore

我已经看到这完成基于这里的角色(http://forums.asp.net/t/1653362.aspx/1)和这里(如何在MVC 3中使用多个布局?)但我不想去做.我需要根据客户的路线选择我的布局(也就是看他们在里面).

提前感谢您提供任何帮助.

hun*_*ter 13

你有没有看过在_ViewStart.cshtml任何给定的视图文件夹中使用文件?

如果这不是您正在寻找的并且您希望路由中的值确定要使用的布局,您可以尝试创建一个将返回要使用的布局的辅助方法:

    public static class LayoutHelper
    {
        public static string GetLayout(RouteData data, string defaultLayout = "")
        {
            if (data.Values["action"] == "edit")
                return "~/views/shared/_AdminLayout.cshtml";

            return defaultLayout;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后你就可以从你的View中调用它:

@{
    Layout = LayoutHelper.GetLayout(
        Request.RequestContext.RouteData,
        "~/views/shared/_layout.cshtml");
}
Run Code Online (Sandbox Code Playgroud)

但在我看来,如果你在包含商店布局_ViewStart.cshtmlViews/Store文件夹中创建了一个文件,你就可以了.