【问题标题】:Blazor .NET Core 3.0 - Can cshtml pages use MainLayout.razorBlazor .NET Core 3.0 - cshtml 页面可以使用 MainLayout.razor
【发布时间】:2020-01-25 07:06:55
【问题描述】:

对于以前版本的 Blazor,所有文件都是 cshtml 页面,并且能够使用类似于 MVC 项目的 _layout - 一切都很好。

但现在在新的 .NET Core 3.0 版本中,Blazor 模板切换到 *.razor 文件,这些文件是 razor 组件(不是 razor 页面)。并且布局现在是 Shared/MainLayout.razor 并通过 App.razor 文件中的路由应用:

<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />

所以这会造成混乱。我们仍然可以将剃须刀页面(.cshtml 文件)添加到项目中,但它们没有应用布局。创建和维护 2 个独立的相同布局会很痛苦,1 个用于 razor 页面,1 个用于 razor 组件。我找不到这方面的任何指导。

有没有办法将剃须刀组件布局(Shared/MainLayout.razor)应用于同一项目内的剃须刀页面(.cshtml 文件)?如果不是,推荐的方法是什么?

【问题讨论】:

  • 有类似的问题,因为我不得不搭建一些身份以更改登录和其他页面。如您所说,似乎没有办法继承布局。你有没有找到解决这个问题的方法?

标签: layout blazor .net-core-3.0


【解决方案1】:

我目前有同样的问题,真的很烦人。也会对此解决方案感兴趣。我什至无法加载布局

@{

    Layout = "shared/MainLayout.razor";
}

因为它需要一个名为 MainLayout.razor.cshtml 的文件。

【讨论】:

    【解决方案2】:

    快速回答是否定的。目前,您可以将 Razor 组件加载到 Razor 页面中,但不能将 Razor 页面加载到 Razor 组件中。这在official docs 中有说明。

    我不确定是否有这样的推荐方法 - 除了尝试尽可能多地重构为 Razor 组件,如果在任何地方使用组件是您的目标。

    如果你想保持混合,那么我建议坚持使用 Razor Pages 作为页面(希望这是有意义的)并且只在这些页面中使用组件。这样,您只需要一种 Layout 类型。

    【讨论】:

    • NotFound 组件(在 App.razor 中)能否将布局设置为 _Layout.cshtml?整个应用程序仅供授权用户使用。我已经有一个用于身份页面的 .cshtml 布局,可以使用还是需要创建第三个布局?
    【解决方案3】:

    在你的_Layout页面的head中添加

    <base href="~/" />
    

    body底部添加

    <script src="_framework/blazor.server.js"></script>
    

    然后在你的 _Host.cshtml 文件添加

    @{
        Layout = "_Layout"; //your Layout name
    }
    

    更多信息请关注link

    【讨论】:

      猜你喜欢
      • 2021-09-12
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多