Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.
Tento článek vysvětluje, jak řídit obsah komponenty Razor z podřízené Razor komponenty.
Blazor sekce
Pokud chcete řídit obsah komponenty Razor z podřízené Razor komponenty, Blazor podporuje oddíly pomocí následujících předdefinovaných komponent:
SectionOutlet: Vykreslí obsah poskytovaný komponentami SectionContent s odpovídajícími SectionName argumenty nebo SectionId argumenty. Dvě nebo více SectionOutlet součástí nemůže mít stejnou SectionName nebo SectionId.
SectionContent: Poskytuje obsah jako RenderFragmentSectionOutlet součásti s odpovídajícími SectionName nebo SectionId. Pokud má několik SectionContent komponent stejné SectionName nebo SectionId, odpovídající SectionOutlet komponenta vykreslí obsah posledního vykreslení SectionContent.
Oddíly lze použít v rozloženích i ve vnořených komponentách nadřazeného-podřízeného objektu.
I když argument předaný SectionName může používat jakýkoli typ pouzdra, dokumentace přijímá kebab casing (například top-bar), což je běžná volba pro ID elementů HTML.
SectionId obdrží statické object pole a pro názvy polí jazyka C# vždy doporučujeme písmena Pascal (například TopbarSection).
V následujícím příkladu implementuje hlavní komponenta rozložení aplikace tlačítko čítače přírůstku pro komponentu Counter aplikace.
Pokud obor názvů pro oddíly není v _Imports.razor souboru, přidejte ho:
@using Microsoft.AspNetCore.Components.Sections
V komponentě MainLayout (MainLayout.razor), umístěte komponentu SectionOutlet a předejte do parametru SectionName řetězec, který označuje název oddílu. Následující příklad používá název top-baroddílu:
<SectionOutlet SectionName="top-bar" />
V komponentě Counter (Counter.razor), vytvořte komponentu SectionContent a předejte odpovídající řetězec (top-bar) jeho SectionName parametru:
<SectionContent SectionName="top-bar">
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
</SectionContent>
Counter Při přístupu /counterMainLayoutke komponentě vykreslí komponenta tlačítko pro zvýšení počtu z Counter komponenty, kde je komponenta SectionOutlet umístěna. Při přístupu k jakékoli jiné komponentě se tlačítko pro zvýšení počtu nevykreslí.
Místo použití pojmenovaného oddílu object můžete předat statický SectionId s parametrem k identifikaci oddílu. Následující příklad také implementuje tlačítko čítače přírůstku pro komponentu aplikace Counter v hlavním rozložení aplikace.
Pokud nechcete, aby se jiné SectionContent komponenty omylem shodovaly s názvem objektu SectionOutlet, předejte parametr objektu SectionId k identifikaci oddílu. To může být užitečné při návrhu Razor knihovny tříd (RCL). SectionOutlet Když v seznamu RCL použije odkaz na objekt s objektem SectionId a příjemce umístí komponentu SectionContent s odpovídajícím SectionId objektem, není náhodná shoda podle názvu možná, když příjemci seznamu RCL implementují další SectionContent komponenty.
Následující příklad také implementuje tlačítko čítače přírůstku pro komponentu aplikace v hlavním rozložení aplikace Counter pomocí odkazu na objekt místo názvu oddílu.
Přidejte statickou TopbarSectionobject komponentu MainLayout@code do bloku:
@code {
internal static object TopbarSection = new();
}
MainLayout V kódu komponenty Razor umístěte komponentu SectionOutlet a předejte TopbarSection parametruSectionId, který označuje oddíl:
<SectionOutlet SectionId="TopbarSection" />
Přidejte komponentu SectionContent do komponenty aplikace Counter , která vykreslí tlačítko pro zvýšení počtu. Jako (MainLayout) použijte statickou TopbarSectionobject část komponentySectionId.MainLayout.TopbarSection
V Counter.razor:
<SectionContent SectionId="MainLayout.TopbarSection">
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
</SectionContent>
Counter Při přístupu MainLayout ke komponentě se vykreslí tlačítko pro zvýšení počtu, ve kterém je komponenta SectionOutlet umístěná.
Poznámka:
SectionOutlet a SectionContent komponenty mohou nastavit pouze jednu SectionId nebo SectionName, nikoli obě.
RenderFragment pravidla mezipaměti a vykreslování sekcí a jejich chování
Když se obsah SectionContentRenderFragment změní, což je jiná instance než komponenta, ve které se vykresluje, Blazor zcela zničí a znovu vytvoří sekci místo toho, aby se pokusil aktualizovat obsah sekce. Na rozdíl od normálního vykreslování může obsah oddílu pocházet z různých instancí a nemá smysl pokoušet se o zpracování obsahu ze dvou samostatných komponent, což může vést k neočekávaným výsledkům. Podrobné vysvětlení tohoto chování naleznete v tématu Nekonzistentní inicializace komponent s Blazor SectionOutlet/SectionContent a CascadingValue (dotnet/aspnetcore #58316).
Interakce oddílů s dalšími Blazor funkcemi
Oddíl komunikuje s dalšími Blazor funkcemi následujícími způsoby:
- Kaskádové hodnoty proudí do obsahu oddílu, ze kterého je obsah definován komponentou SectionContent .
- Neošetřené výjimky se zpracovávají pomocí hranic chyb definovaných kolem SectionContent komponenty.
- Komponenta Razor nakonfigurovaná pro vykreslování streamování také konfiguruje obsah oddílu poskytovaný komponentou SectionContent pro použití vykreslování streamování.
- Oddíl, který obsahuje interaktivní komponenty, se staticky vykresluje (nefunkčně) v komponentě rozložení, Blazor Web App která přijímá vykreslování jednotlivých stránek nebo komponent. Další informace najdete v tématu ASP.NET Core Blazor rozložení.