Blazor Layout 子文件夹导致无限循环

KWV*_*KWV 1 blazor blazor-server-side

我创建了一个新的 blazor 服务器应用程序(Visual studio for Mac 中的默认 Microsoft 示例模板)。然后在 Page 文件夹中,我创建了一个新的子文件夹“Test”。在子文件夹“Test”中,我创建了以下文件:

_Imports.razor

@layout TestTemplate
Run Code Online (Sandbox Code Playgroud)

测试模板.razor

@inherits LayoutComponentBase

<h1>Test layout</h1>

@Body
Run Code Online (Sandbox Code Playgroud)

索引剃刀

@page "/test"

<h3>Hello test layout</h3>

@code {

}
Run Code Online (Sandbox Code Playgroud)

当我构建解决方案时,没有发现错误。但是当我打开浏览器并访问 URL http://localhost:portnr/test 时,我的浏览器会继续渲染/挂起(我认为是无限循环)。

根据 Microsoft https://learn.microsoft.com/en-us/aspnet/core/blazor/components/layouts?view=aspnetcore-6.0的文档,上述步骤应该有效(请参阅“将布局应用于文件夹”部分) 。

我检查了项目根目录下的 _Imports.razor 文件,看看是否有其他对 @layout 的引用,因为根据上面的链接,这将导致无限循环。App.razor 包含对 MainLayout 的引用:

<Router AppAssembly="@typeof(App).Assembly">
    <Found Context="routeData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
        <FocusOnNavigate RouteData="@routeData" Selector="h1" />
    </Found>
    <NotFound>
        <PageTitle>Not found</PageTitle>
        <LayoutView Layout="@typeof(MainLayout)">
            <p role="alert">Sorry, there's nothing at this address.</p>
        </LayoutView>
    </NotFound>
</Router>
Run Code Online (Sandbox Code Playgroud)

KWV*_*KWV 8

找到了解决方案。虽然它看起来像一个老话题,但它仍然适用于.net core 6: https: //github.com/dotnet/aspnetcore/issues/11406

因此,如果将布局文件与_Imports.razor文件放在同一文件夹中,就会出错。我已将TestLayout.razor移至共享文件夹,一切都开始工作。