You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server配置NotFound复用MainLayout并避免重渲染问题

解决Blazor导航时布局重渲染问题

你的问题核心是当前代码中Found和NotFound分支分别创建了MainLayout的独立实例,导致在正常页面和404页面间导航时,布局组件会被销毁重建,重复执行初始化逻辑。

直接修改App.razor,把布局组件提升到路由外层,让整个路由系统共享同一个布局实例即可解决:

<CascadingAuthenticationState>
    <LayoutView Layout="@typeof(MainLayout)">
        <Router AppAssembly="@typeof(Program).Assembly">
            <Found Context="routeData">
                <!-- 不再指定DefaultLayout,复用外层的MainLayout -->
                <AuthorizeRouteView RouteData="@routeData" />
            </Found>
            <NotFound>
                <PageTitle>Not found</PageTitle>
                <!-- 直接渲染内容,无需再嵌套LayoutView -->
                Sorry, there's nothing at this address.
            </NotFound>
        </Router>
    </LayoutView>
</CascadingAuthenticationState>

修改说明:

  • 把MainLayout通过LayoutView包裹整个Router,确保所有路由内容(包括正常页面和404页面)都在同一个布局实例的内容区域渲染。
  • 移除AuthorizeRouteView的DefaultLayout属性,避免重复创建布局实例。
  • NotFound分支直接输出内容,无需再用LayoutView嵌套,因为已经处于MainLayout的上下文里。

这样修改后,切换正常页面和404页面时,MainLayout只会初始化一次,不会被重复渲染。

内容的提问来源于stack exchange,提问作者CSharpDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:06:00