C# razor 应用程序中是否可以有多个布局页面?

pen*_*178 6 asp.net-core razor-pages

以前,我使用 MVC 创建了 C# 应用程序,并且可以指定要在其文件中的视图上使用的布局视图。这样视图文件包含:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

/*Rest of file*/
Run Code Online (Sandbox Code Playgroud)

最近我开始使用 Razor 页面创建应用程序。到目前为止,我只有一个布局页面。但是,我想对页面子集使用不同的布局页面,并且我只能看到如何为 Pages 文件夹中的所有页面指定单个布局页面。由于布局是在_ViewStart.cshtml文件中声明的。该文件的内容很简单:

@{
    Layout = "_Layout";
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以对某些页面使用一个布局文件,然后对其他页面使用不同的布局文件?

Yiy*_*You 10

如果你想的话using one layout file for some pages, and then a different layout files for other pages,你可以尝试在_ViewStart.cshtml中获取当前的url,然后检查url并设置布局页面。下面是一个演示:

_ViewStart.cshtml(Page1和Page2将设置Layout = "_Layout";,其他页面将设置Layout = "_Layout1";):

@{
    var routeUrl = ViewContext.RouteData.Values["Page"].ToString();
    //you can put pages' name into pages
    var pages = new List<string> { "Page1", "Page2"};
    //if routeUrl contains any of pages,the page will use _Layout as Layout page,the other pages will use _Layout1 ad Layout page
    if (pages.Any(routeUrl.Contains))
    {
        Layout = "_Layout";
    }
    else {
        Layout = "_Layout1";
    }

}
Run Code Online (Sandbox Code Playgroud)

结果: 在此输入图像描述

另外,您可以使用

@{
   Layout="xxx"
}
Run Code Online (Sandbox Code Playgroud)

如前所述,在不同页面中设置不同的布局David Tansey