ASP.NET Core Blazor seções

Este artigo explica como controlar o conteúdo em um componente Razor de um componente de filho Razor.

Seções Blazor

Para controlar o conteúdo em um Razor componente de um componente filho Razor, Blazor suporta seções usando os seguintes componentes integrados:

As seções podem ser usadas em layouts e em componentes pai-filho aninhados.

Embora o argumento passado para SectionName possa usar qualquer tipo de capitalização, a documentação adota a capitalização kebab (por exemplo, top-bar), que é uma escolha comum de capitalização para IDs de elemento HTML. SectionId recebe um campo object estático e sempre recomendamos maiúsculas e minúsculas Pascal para nomes de campo C# (por exemplo, TopbarSection).

No exemplo a seguir, o componente de layout principal do aplicativo implementa um botão de contador de incremento para o componente Counter do aplicativo.

Se o namespace das seções não estiver no arquivo _Imports.razor adicione-o:

@using Microsoft.AspNetCore.Components.Sections

No componente MainLayout (MainLayout.razor), coloque um componente SectionOutlet e passe uma string para o parâmetro SectionName para indicar o nome da seção. O exemplo a seguir usa o nome da seção top-bar:

<SectionOutlet SectionName="top-bar" />

No Counter componente (Counter.razor), crie um SectionContent componente e passe a cadeia de caracteres correspondente (top-bar) para seu SectionName parâmetro:

<SectionContent SectionName="top-bar">
    <button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
</SectionContent>

Quando o componente Counter é acessado em /counter, o componente MainLayout renderiza o botão de contagem de incremento do componente Counter onde o componente SectionOutlet é colocado. Quando qualquer outro componente é acessado, o botão de contagem de incremento não é renderizado.

Em vez de usar uma seção nomeada, você pode passar um object estático com o parâmetro SectionId para identificar a seção. O exemplo a seguir também implementa um botão de contador de incremento para o componente Counter do aplicativo no layout principal do aplicativo.

Se você não quiser que outros componentes SectionContent coincidam acidentalmente com o nome de um SectionOutlet, passe um parâmetro de objeto SectionId para identificar a seção. Isso pode ser útil ao projetar uma Razor biblioteca de classes (RCL). Quando um SectionOutlet no RCL usa uma referência de objeto com SectionId e o consumidor coloca um componente SectionContent com um objeto SectionId correspondente, uma correspondência acidental por nome não é possível quando os consumidores do RCL implementam outros componentes SectionContent.

O exemplo a seguir também implementa um botão de contador de incremento para o componente Counter do aplicativo no layout principal do aplicativo, usando uma referência de objeto em vez de um nome de seção.

Adicione um TopbarSection static object ao MainLayout componente em um @code bloco:

@code {
    internal static object TopbarSection = new();
}

Na marcação do MainLayout componente Razor, coloque um SectionOutlet componente e passe TopbarSection para o parâmetro SectionId para indicar a seção:

<SectionOutlet SectionId="TopbarSection" />

Adicione um componente SectionContent ao componente Counter do aplicativo que renderiza um botão de contagem de incremento. Use a seção estática MainLayout do TopbarSection componente object como o SectionId (MainLayout.TopbarSection).

No Counter.razor:

<SectionContent SectionId="MainLayout.TopbarSection">
    <button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
</SectionContent>

Quando o componente Counter é acessado, o componente MainLayout renderiza o botão de contagem de incrementos onde o componente SectionOutlet é colocado.

Observação

SectionOutlet e SectionContent os componentes só podem definir SectionId ou SectionName, não ambos.

Interação da seção com outros Blazor recursos

Uma seção interage com outros Blazor recursos das seguintes maneiras: