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
相关产品推荐
相关产品推荐

