Delen via


ASP.NET Core-secties Blazor

Opmerking

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikel voor de huidige release.

Belangrijk

Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.

Zie de .NET 9-versie van dit artikel voor de huidige release.

In dit artikel wordt uitgelegd hoe u de inhoud in een Razor onderdeel kunt beheren vanuit een onderliggend Razor onderdeel.

Blazor Secties

Als u de inhoud in een Razor onderdeel van een onderliggend Razor onderdeel wilt beheren, Blazor ondersteunt u secties met behulp van de volgende ingebouwde onderdelen:

Secties kunnen worden gebruikt in zowel layouts als in geneste componenten.

Hoewel het argument dat aan SectionName wordt doorgegeven elk type lettertype kan gebruiken, hanteert de documentatie kebab casing (bijvoorbeeld top-bar), wat een veelvoorkomende keuze is voor HTML-element-id's. SectionId ontvangt een statisch object veld, en we raden altijd aan om Pascal casing te gebruiken voor C#-veldnamen (bijvoorbeeld TopbarSection).

In het volgende voorbeeld implementeert het hoofdindelingsonderdeel van de app een knop om de teller te verhogen voor het Counter-onderdeel van de app.

Als de naamruimte voor secties zich niet in het _Imports.razor bestand bevindt, voegt u deze toe:

@using Microsoft.AspNetCore.Components.Sections

Plaats een MainLayout onderdeel in het MainLayout.razor onderdeel (SectionOutlet) en geef een tekenreeks door aan de parameter om de SectionName naam van de sectie aan te geven. In het volgende voorbeeld wordt de sectienaam top-bargebruikt:

<SectionOutlet SectionName="top-bar" />

Maak in de Counter-component (Counter.razor) een SectionContent-component en geef de overeenkomende tekenreeks (top-bar) door aan zijn SectionName-parameter.

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

Wanneer het Counter onderdeel wordt geopend op /counter, geeft het MainLayout onderdeel de knop Increment Count weer van het Counter onderdeel waarin het SectionOutlet onderdeel wordt geplaatst. Wanneer een ander onderdeel wordt geopend, wordt de knop aantal stappen niet weergegeven.

In plaats van een benoemde sectie te gebruiken, kunt u een statische object parameter SectionId doorgeven om de sectie te identificeren. In het volgende voorbeeld wordt ook een verhoogtellerknop geïmplementeerd voor het Counter-onderdeel in de hoofdindeling van de app.

Als u niet wilt dat andere SectionContent onderdelen per ongeluk overeenkomen met de naam van een SectionOutlet, geeft u een objectparameter SectionId door om de sectie te identificeren. Dit kan handig zijn bij het ontwerpen van een Razor klassebibliotheek (RCL). Wanneer een SectionOutlet in de RCL gebruikmaakt van een objectverwijzing met SectionId en de consument een SectionContent onderdeel met een overeenkomend SectionId object plaatst, is een onbedoelde overeenkomst op naam niet mogelijk wanneer consumenten van de RCL andere SectionContent onderdelen implementeren.

In het volgende voorbeeld wordt ook een incrementele tellerknop geïmplementeerd voor het onderdeel van Counter de app in de hoofdindeling van de app, met behulp van een objectverwijzing in plaats van een sectienaam.

Voeg een TopbarSection statisch object element toe aan het MainLayout onderdeel in een @code blok:

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

Plaats een MainLayout component in de markup van de Razor component SectionOutlet en geef TopbarSection door aan de parameter SectionId om de sectie aan te geven.

<SectionOutlet SectionId="TopbarSection" />

Voeg een SectionContent component toe aan de Counter component van de app die een knop voor het verhogen van de telling weergeeft. Gebruik de sectie statisch van het MainLayout onderdeel TopbarSection als de object (SectionId).MainLayout.TopbarSection

In Counter.razor:

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

Wanneer het Counter component wordt benaderd, toont het MainLayout component de knop om het aantal te verhogen op de plaats waar het SectionOutlet component is geplaatst.

Opmerking

SectionOutlet en SectionContent componenten kunnen alleen SectionId of SectionName instellen, niet beide tegelijk.

RenderFragment cacheregels en gedrag voor het weergeven van secties

Wanneer de inhoud van SectionContent verandert en zich in een andere instantie bevindt dan de component waarin het is weergegeven, volledig vernietigt en hercreëert Blazor de sectie in plaats van te proberen de inhoud van de sectie bij te werken. In tegenstelling tot normale rendering kan de inhoud van de sectie afkomstig zijn van verschillende exemplaren en is het niet zinvol om inhoud van twee afzonderlijke onderdelen te verwerken, wat kan leiden tot onverwachte resultaten. Zie Inconsistente component initialisatie met Blazor SectionOutlet/SectionContent en CascadingValue (dotnet/aspnetcore #58316) voor een gedetailleerde uitleg over dit gedrag.

Sectie-interactie met andere Blazor functies

Een sectie communiceert op de volgende manieren met andere Blazor functies: