是否可以在 C# razor 应用程序中拥有多个布局页面?
Is it possible to have multiple layout pages in a C# razor application?
之前我使用 MVC 创建了 C# 应用程序,并且可以在其文件中指定要在视图上使用的布局视图。这样视图文件包含:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
/*Rest of file*/
最近我开始使用 razor pages 创建应用程序。到目前为止,我只有一个布局页面。但是,我想为页面的子集使用不同的布局页面,我只能看到如何为页面文件夹中的所有页面指定一个布局页面。由于布局在 _ViewStart.cshtml
文件中声明。该文件的内容很简单:
@{
Layout = "_Layout";
}
有没有办法对某些页面使用一个布局文件,然后对其他页面使用不同的布局文件?
如果你想 using one layout file for some pages, and then a different layout files for other pages
。你可以尝试在 _ViewStart.cshtml 中获取当前 url,然后检查 url 并设置布局 page.Here是演示:
_ViewStart.cshtml(第1页和第2页设置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";
}
}
结果:
此外,您可以使用
@{
Layout="xxx"
}
如David Tansey
所述,在不同的页面设置不同的布局。
有多种方法可以做到这一点:
即使您在 ViewStart.cshtml 中注册了单一布局,您仍然可以在特定页面上使用不同的布局,例如:
Layout = "~/Views/Shared/_Layout2.cshtml";
您可以使用 ViewData 或 ViewBag 分配布局值并在您的 cshtm 文件中使用它
您可以添加一个检查来识别您需要使用的布局:
.....
@{
if (User.IsInRole("Admin"))
{
Layout = "_AdminLayout";
}
else
{
Layout = "_Layout";
}
}
之前我使用 MVC 创建了 C# 应用程序,并且可以在其文件中指定要在视图上使用的布局视图。这样视图文件包含:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
/*Rest of file*/
最近我开始使用 razor pages 创建应用程序。到目前为止,我只有一个布局页面。但是,我想为页面的子集使用不同的布局页面,我只能看到如何为页面文件夹中的所有页面指定一个布局页面。由于布局在 _ViewStart.cshtml
文件中声明。该文件的内容很简单:
@{
Layout = "_Layout";
}
有没有办法对某些页面使用一个布局文件,然后对其他页面使用不同的布局文件?
如果你想 using one layout file for some pages, and then a different layout files for other pages
。你可以尝试在 _ViewStart.cshtml 中获取当前 url,然后检查 url 并设置布局 page.Here是演示:
_ViewStart.cshtml(第1页和第2页设置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";
}
}
结果:
此外,您可以使用
@{
Layout="xxx"
}
如David Tansey
所述,在不同的页面设置不同的布局。
有多种方法可以做到这一点:
即使您在 ViewStart.cshtml 中注册了单一布局,您仍然可以在特定页面上使用不同的布局,例如:
Layout = "~/Views/Shared/_Layout2.cshtml";
您可以使用 ViewData 或 ViewBag 分配布局值并在您的 cshtm 文件中使用它
您可以添加一个检查来识别您需要使用的布局:
.....
@{
if (User.IsInRole("Admin"))
{
Layout = "_AdminLayout";
}
else
{
Layout = "_Layout";
}
}