Blazor 母版页

发布时间 2023-08-21 14:38:48作者: cchong005

什么是母版页

官方示例的 MainLayout.razor 即为母版页;母版页必须继承 LayoutComponentBase,你可以通过继承 LayoutComponentBase 来写自己的母版页

@inherits LayoutComponentBase
<div class="page">
    <div class="sidebar">
        <NavMenu />
    </div>
    <main>
        <div class="top-row px-4">
            <a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a>
        </div>
        <article class="content px-4">
            @Body
        </article>
    </main>
</div>

母版页可以没有 @Body,但是没有Body就没法为子页面占位

 

如何使用母版页

子页面使用 @layout 来指定母版页

@page "/Index"
@layout MainLayout

<PageTitle>Index</PageTitle>
<h1>我是子页面</h1>

 

全局母版页

在 App.razor 中,为 RouteView 指定默认的 layout,DefaultLayout="@typeof(MainLayout)" ,这样就不用在每个子页面里都专门设置一个母版页了

@using BlazorApp1.Pages;
<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>

以上是官方示例的 App.razor; 也即是说,这里面的 DefaultLayout 实际上是可以不配置的