【问题标题】:Is it possible to have multiple layout pages in a C# razor application?C# razor 应用程序中是否可以有多个布局页面?
【发布时间】:2021-06-15 01:22:02
【问题描述】:

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

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

/*Rest of file*/

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

@{
    Layout = "_Layout";
}

有没有办法为某些页面使用一个布局文件,然后为其他页面使用不同的布局文件?

【问题讨论】:

  • 这看起来像是从 .Net Framework 更改为 .Net Core,对吗?而不是 MVC 和 Razor?我一口气从 .Net Framework MVC 切换到 .Net Core Razor,所以我并不总是确定哪个部分在哪里发生了变化。
  • 它似乎确实发生了变化。我将专注于@Sanket 提供的那篇文章中的答案。这种方法对我来说最有意义。您的里程可能会有所不同。

标签: asp.net-core razor-pages


【解决方案1】:

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

_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所说,在不同的页面设置不同的布局。

【讨论】:

  • 这正是我想要的。很好,易于实现。
  • 如果我的回答有帮助,你能接受吗?谢谢。
【解决方案2】:

有多种方法可以做到这一点:

  1. 即使您在 ViewStart.cshtml 中注册了单个布局,您仍然可以在特定页面上使用不同的布局,例如:

    布局 = "~/Views/Shared/_Layout2.cshtml";

  2. 您可以使用 ViewData 或 ViewBag 来分配布局值并在您的 cshtm 文件中使用它

  3. 您可以添加一个检查来标识您需要使用哪种布局:

.....

@{
    if (User.IsInRole("Admin"))
    {
        Layout = "_AdminLayout";
    }
    else
    {
        Layout = "_Layout";
    }
}

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 2020-04-10
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2020-09-17
    相关资源
    最近更新 更多