Integrace základních komponent ASP.NET Razor s MVC nebo Razor Stránkami
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Razor komponenty lze integrovat do Razor aplikací Pages nebo MVC. Při vykreslení stránky nebo zobrazení je možné předem vykreslit komponenty současně.
Důležité
Změny architektury napříč verzemi ASP.NET Core vedly k různým sadám pokynů v tomto článku. Než použijete pokyny k tomuto článku, ověřte, že selektor verzí dokumentu v horní části tohoto článku odpovídá verzi ASP.NET Core, kterou chcete pro svou aplikaci používat.
Prerendering může zlepšit optimalizaci vyhledávacího webu (SEO) vykreslením obsahu pro počáteční odpověď HTTP, kterou můžou vyhledávací weby použít k výpočtu pořadí stránek.
Po dokončení konfigurace projektu použijte pokyny v následujících částech v závislosti na požadavcích projektu:
- U komponent, které jsou přímo směrovatelné z uživatelských požadavků. Postupujte podle těchto pokynů, když by návštěvníci měli být schopni vytvořit požadavek HTTP v prohlížeči pro komponentu s direktivou
@page
. - Součásti, které nejsou přímo směrovatelné z uživatelských požadavků, najdete v části Vykreslení ze stránky nebo zobrazení . Při vkládání komponent do existujících stránek nebo zobrazení pomocí pomocné rutiny značek komponent postupujte podle těchto pokynů.
Konfigurace
Následující doprovodné materiály použijte k integraci Razor komponent do stránek nebo zobrazení existující Razor aplikace Pages nebo MVC.
Přidejte soubor importu do kořenové složky projektu s následujícím obsahem.
{APP NAMESPACE}
Změňte zástupný symbol na obor názvů projektu._Imports.razor
:@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using {APP NAMESPACE}
V souboru rozložení projektu (
Pages/Shared/_Layout.cshtml
v Razor aplikacích Pages neboViews/Shared/_Layout.cshtml
v aplikacích MVC):Do elementu přidejte následující
<base>
značku a HeadOutlet pomocné rutiny<head>
značek komponent:<base href="~/" /> <component type="typeof(Microsoft.AspNetCore.Components.Web.HeadOutlet)" render-mode="ServerPrerendered" />
Hodnota
href
(základní cesta aplikace) v předchozím příkladu předpokládá, že se aplikace nachází v kořenové cestě URL (/
). Pokud je aplikace dílčí aplikací, postupujte podle pokynů v části Základní cesta aplikace v článku Hostitel a nasaďte ASP.NET CoreBlazor.Tato komponenta HeadOutlet slouží k vykreslení obsahu hlavy (
<head>
) pro názvy stránek (PageTitle součást) a další hlavní prvky (HeadContent komponenta) nastavené komponentami Razor . Další informace najdete v tématu Řízení hlavního obsahu v aplikacích ASP.NET CoreBlazor.<script>
Přidejte značkublazor.server.js
skriptu bezprostředně předScripts
oddíl vykreslení (@await RenderSectionAsync(...)
):<script src="_framework/blazor.server.js"></script>
Architektura přidá
blazor.server.js
skript do aplikace. Do aplikace nemusíte ručně přidávatblazor.server.js
soubor skriptu.
Poznámka:
Rozložení se obvykle načte prostřednictvím
_ViewStart.cshtml
souboru.Blazor Server Zaregistrujte služby, ve
Program.cs
kterých jsou služby zaregistrované:builder.Services.AddServerSideBlazor();
Blazor Přidejte koncový bod centra do koncových bodů
Program.cs
, ve kterých se mapují trasy. Za volánímMapRazorPages
(Razor Pages) neboMapControllerRoute
(MVC) umístěte následující řádek:app.MapBlazorHub();
Integrujte komponenty do libovolné stránky nebo zobrazení. Přidejte například komponentu
Counter
do složky projektuShared
.Pages/Shared/Counter.razor
(Razor Pages) neboViews/Shared/Counter.razor
(MVC):<h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Razor Stránky:
Na stránce Razor projektu
Index
aplikace Pages přidejteCounter
obor názvů komponenty a vložte ji do stránky. Když seIndex
stránka načte, komponentaCounter
je na stránce předem vyřazována. V následujícím příkladu nahraďte{APP NAMESPACE}
zástupný symbol oborem názvů projektu.Pages/Index.cshtml
:@page @using {APP NAMESPACE}.Pages.Shared @model IndexModel @{ ViewData["Title"] = "Home page"; } <component type="typeof(Counter)" render-mode="ServerPrerendered" />
MVC:
V zobrazení projektu
Index
aplikace MVC přidejteCounter
obor názvů komponenty a vložte ji do zobrazení. Když seIndex
zobrazení načte, komponentaCounter
je na stránce předem vyřazována. V následujícím příkladu nahraďte{APP NAMESPACE}
zástupný symbol oborem názvů projektu.Views/Home/Index.cshtml
:@using {APP NAMESPACE}.Views.Shared @{ ViewData["Title"] = "Home Page"; } <component type="typeof(Counter)" render-mode="ServerPrerendered" />
Další informace najdete v části Vykreslovat komponenty ze stránky nebo zobrazení .
Použití směrovatelných komponent v Razor aplikaci Pages
Tato část se týká přidání komponent, které jsou přímo směrovatelné z uživatelských požadavků.
Podpora směrovatelných Razor komponent v Razor aplikacích Pages:
Postupujte podle pokynů v části Konfigurace .
Přidejte komponentu
App
do kořenového adresáře projektu s následujícím obsahem.App.razor
:@using Microsoft.AspNetCore.Components.Routing <Router AppAssembly="typeof(App).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" /> </Found> <NotFound> <PageTitle>Not found</PageTitle> <p role="alert">Sorry, there's nothing at this address.</p> </NotFound> </Router>
_Host
Přidejte do projektu stránku s následujícím obsahem.{APP NAMESPACE}
Zástupný symbol nahraďte oborem názvů aplikace.Pages/_Host.cshtml
:@page @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <component type="typeof(App)" render-mode="ServerPrerendered" />
Poznámka:
Předchozí příklad předpokládá, že komponenta HeadOutlet a Blazor skript (
_framework/blazor.server.js
) jsou vykresleny rozložením aplikace. Další informace najdete v části Konfigurace .RenderMode nakonfiguruje, jestli komponenta
App
:- Je předem vytáhlý na stránku.
- Je vykreslen jako statický kód HTML na stránce nebo pokud obsahuje potřebné informace ke spuštění Blazor aplikace z uživatelského agenta.
Další informace o pomocné rutině značky komponenty, včetně předávání parametrů a RenderMode konfigurace, naleznete v nápovědě značky komponenty v ASP.NET Core.
Program.cs
Do koncových bodů přidejte trasu s nízkou prioritou pro_Host
stránku jako poslední koncový bod:app.MapFallbackToPage("/_Host");
Přidejte do projektu směrovatelné komponenty. Následující příklad je komponenta
RoutableCounter
založená naCounter
komponentě Blazor v šablonách projektu.Pages/RoutableCounter.razor
:@page "/routable-counter" <PageTitle>Routable Counter</PageTitle> <h1>Routable Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Spusťte projekt a přejděte na směrovatelnou
RoutableCounter
komponentu na adrese/routable-counter
.
Použití směrovatelných komponent v aplikaci MVC
Tato část se týká přidání komponent, které jsou přímo směrovatelné z uživatelských požadavků.
Podpora směrovatelných Razor komponent v aplikacích MVC:
Postupujte podle pokynů v části Konfigurace .
Přidejte komponentu
App
do kořenového adresáře projektu s následujícím obsahem.App.razor
:@using Microsoft.AspNetCore.Components.Routing <Router AppAssembly="typeof(App).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" /> </Found> <NotFound> <PageTitle>Not found</PageTitle> <p role="alert">Sorry, there's nothing at this address.</p> </NotFound> </Router>
_Host
Přidejte do projektu zobrazení s následujícím obsahem.{APP NAMESPACE}
Zástupný symbol nahraďte oborem názvů aplikace.Views/Home/_Host.cshtml
:@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <component type="typeof(App)" render-mode="ServerPrerendered" />
Poznámka:
Předchozí příklad předpokládá, že komponenta HeadOutlet a Blazor skript (
_framework/blazor.server.js
) jsou vykresleny rozložením aplikace. Další informace najdete v části Konfigurace .RenderMode nakonfiguruje, jestli komponenta
App
:- Je předem vytáhlý na stránku.
- Je vykreslen jako statický kód HTML na stránce nebo pokud obsahuje potřebné informace ke spuštění Blazor aplikace z uživatelského agenta.
Další informace o pomocné rutině značky komponenty, včetně předávání parametrů a RenderMode konfigurace, naleznete v nápovědě značky komponenty v ASP.NET Core.
Přidejte akci do Home kontroleru.
Controllers/HomeController.cs
:public IActionResult Blazor() { return View("_Host"); }
Program.cs
Do koncových bodů přidejte trasu s nízkou prioritou pro akci kontroleru, která vrací_Host
zobrazení:app.MapFallbackToController("Blazor", "Home");
Vytvořte
Pages
složku v aplikaci MVC a přidejte směrovatelné komponenty. Následující příklad je komponentaRoutableCounter
založená naCounter
komponentě Blazor v šablonách projektu.Pages/RoutableCounter.razor
:@page "/routable-counter" <PageTitle>Routable Counter</PageTitle> <h1>Routable Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Spusťte projekt a přejděte na směrovatelnou
RoutableCounter
komponentu na adrese/routable-counter
.
Vykreslení komponent ze stránky nebo zobrazení
Tato část se týká přidávání komponent na stránky nebo zobrazení, kde nejsou komponenty směrovatelné přímo z uživatelských požadavků.
Pokud chcete vykreslit součást ze stránky nebo zobrazení, použijte pomocnou rutinu značky komponenty.
Vykreslení stavových interaktivních komponent
Stavové interaktivní komponenty lze přidat na Razor stránku nebo zobrazení.
Při vykreslení stránky nebo zobrazení:
- Komponenta je předem vytyčována stránkou nebo zobrazením.
- Počáteční stav součásti použitý pro předkreslování je ztracen.
- Při navázání připojení se vytvoří SignalR nový stav komponenty.
Razor Následující stránka vykreslí komponentuCounter
:
<h1>Razor Page</h1>
<component type="typeof(Counter)" render-mode="ServerPrerendered"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
Další informace naleznete v nápovědě značky komponenty v ASP.NET Core.
Vykreslení neinteraktivních komponent
Na následující Razor stránce Counter
se komponenta staticky vykreslí s počáteční hodnotou zadanou pomocí formuláře. Vzhledem k tomu, že se komponenta staticky vykresluje, není komponenta interaktivní:
<h1>Razor Page</h1>
<form>
<input type="number" asp-for="InitialValue" />
<button type="submit">Set initial value</button>
</form>
<component type="typeof(Counter)" render-mode="Static"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
Další informace naleznete v nápovědě značky komponenty v ASP.NET Core.
Obory názvů komponent
Při použití vlastní složky k uložení součástí projektu Razor přidejte obor názvů představující složku do stránky nebo zobrazení nebo do _ViewImports.cshtml
souboru. V následujícím příkladu:
- Komponenty jsou uloženy ve
Components
složce projektu. - Zástupný
{APP NAMESPACE}
symbol je obor názvů projektu.Components
představuje název složky.
@using {APP NAMESPACE}.Components
Soubor _ViewImports.cshtml
se nachází ve Pages
složce Razor aplikace Pages nebo Views
ve složce aplikace MVC.
Další informace najdete v tématu ASP.NET základní Razor komponenty.
Trvalý předsekenderovaný stav
Bez trvalého předrenderovaného stavu dojde ke ztrátě stavu použitého při předrenderování a při úplném načtení aplikace se musí znovu vytvořit. Pokud je nějaký stav nastaven asynchronně, uživatelské rozhraní může blikáním blikáním, protože se předsekunuté uživatelské rozhraní nahradí dočasnými zástupnými symboly a pak se znovu plně vykreslí.
Chcete-li zachovat stav pro předkazené součásti, použijte pomocníka pro zachování značky stavu součásti (referenční zdroj). Přidejte značku <persist-component-state />
pomocné rutiny značky uvnitř koncové </body>
značky _Host
stránky v aplikaci, která předkončí komponenty.
Poznámka:
Odkazy na dokumentaci k referenčnímu zdroji .NET obvykle načítají výchozí větev úložiště, která představuje aktuální vývoj pro příští verzi .NET. Pokud chcete vybrat značku pro konkrétní verzi, použijte rozevírací seznam pro přepnutí větví nebo značek. Další informace najdete v tématu Jak vybrat značku verze zdrojového kódu ASP.NET Core (dotnet/AspNetCore.Docs #26205).
V Pages/_Host.cshtml
aplikacích Blazor , které jsou ServerPrerendered
v Blazor Server aplikaci:
<body>
...
<persist-component-state />
</body>
Rozhodněte se, jaký stav se má služba zachovat PersistentComponentState . PersistentComponentState.RegisterOnPersisting
zaregistruje zpětné volání pro zachování stavu komponenty před pozastavením aplikace. Stav se načte při obnovení aplikace.
V následujícím příkladu:
- Zástupný
{TYPE}
symbol představuje typ dat, která se mají zachovat (napříkladWeatherForecast[]
). - Zástupný
{TOKEN}
symbol je řetězec identifikátoru stavu (napříkladfetchdata
).
@implements IDisposable
@inject PersistentComponentState ApplicationState
...
@code {
private {TYPE} data;
private PersistingComponentStateSubscription persistingSubscription;
protected override async Task OnInitializedAsync()
{
persistingSubscription =
ApplicationState.RegisterOnPersisting(PersistData);
if (!ApplicationState.TryTakeFromJson<{TYPE}>(
"{TOKEN}", out var restored))
{
data = await ...;
}
else
{
data = restored!;
}
}
private Task PersistData()
{
ApplicationState.PersistAsJson("{TOKEN}", data);
return Task.CompletedTask;
}
void IDisposable.Dispose()
{
persistingSubscription.Dispose();
}
}
Následující příklad je aktualizovaná verze FetchData
komponenty na Blazor základě šablony projektu. Komponenta WeatherForecastPreserveState
zachová stav předpovědi počasí během předkončování a pak načte stav, který komponentu inicializuje. Pomocné rutiny značky stavu součásti zachová stav komponenty po všech vyvolání komponent.
Pages/WeatherForecastPreserveState.razor
:
@page "/weather-forecast-preserve-state"
@using BlazorSample.Shared
@implements IDisposable
@inject IWeatherForecastService WeatherForecastService
@inject PersistentComponentState ApplicationState
<PageTitle>Weather Forecast</PageTitle>
<h1>Weather forecast</h1>
<p>This component demonstrates fetching data from the server.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[] forecasts = Array.Empty<WeatherForecast>();
private PersistingComponentStateSubscription persistingSubscription;
protected override async Task OnInitializedAsync()
{
persistingSubscription =
ApplicationState.RegisterOnPersisting(PersistForecasts);
if (!ApplicationState.TryTakeFromJson<WeatherForecast[]>(
"fetchdata", out var restored))
{
forecasts =
await WeatherForecastService.GetForecastAsync(DateOnly.FromDateTime(DateTime.Now));
}
else
{
forecasts = restored!;
}
}
private Task PersistForecasts()
{
ApplicationState.PersistAsJson("fetchdata", forecasts);
return Task.CompletedTask;
}
void IDisposable.Dispose()
{
persistingSubscription.Dispose();
}
}
Inicializací komponent se stejným stavem, který se používá během předkončování, se všechny nákladné kroky inicializace spustí pouze jednou. Vykreslené uživatelské rozhraní se také shoduje s předem vykresleným uživatelským rozhraním, takže v prohlížeči nedojde k žádnému blikání.
Trvalý prerenderovaný stav se přenese do klienta, kde se používá k obnovení stavu komponenty. ASP.NET Základní ochrana dat zajišťuje, aby se data bezpečně přenášela v Blazor Server aplikacích.
Předem vytyčovaná velikost stavu a SignalR omezení velikosti zprávy
Velká předsekunutá velikost stavu může překročit BlazorSignalR limit velikosti zprávy okruhu, což má za následek následující:
- Okruh SignalR se nepodaří inicializovat s chybou v klientovi: Circuit host not initialized.
- Uživatelské rozhraní pro opětovné připojení v klientovi se zobrazí, když okruh selže. Obnovení není možné.
Pokud chcete tento problém vyřešit, použijte některý z následujících přístupů:
- Snižte množství dat, která vkládáte do předkažovaného stavu.
- SignalR Zvětšete limit velikosti zprávy. UPOZORNĚNÍ: Zvýšení limitu může zvýšit riziko útoků DoS (DoS).
Další Blazor Server zdroje informací
- Správa stavu: Zpracování předkreslování
- Razor předměty životního cyklu komponent, které se týkají předběžného provedení
- Ověřování a autorizace: Obecné aspekty
- Zpracování chyb: Prerendering
- Hostitel a nasazení: Blazor Server
- Zmírnění hrozeb: Skriptování mezi weby (XSS)
- OnNavigateAsync při předkreslování dvakrát: Zpracování asynchronních navigačních událostí pomocí
OnNavigateAsync
Prerendering může zlepšit optimalizaci vyhledávacího webu (SEO) vykreslením obsahu pro počáteční odpověď HTTP, kterou můžou vyhledávací weby použít k výpočtu pořadí stránek.
Po dokončení konfigurace projektu použijte pokyny v následujících částech v závislosti na požadavcích projektu:
- Směrovatelné komponenty: Pro komponenty, které jsou přímo směrovatelné z uživatelských požadavků. Postupujte podle těchto pokynů, když by návštěvníci měli být schopni vytvořit požadavek HTTP v prohlížeči pro komponentu s direktivou
@page
. - Vykreslení komponent ze stránky nebo zobrazení: Pro komponenty, které nejsou přímo směrovatelné z uživatelských požadavků. Při vkládání komponent do existujících stránek nebo zobrazení pomocí pomocné rutiny značek komponent postupujte podle těchto pokynů.
Konfigurace
Následující doprovodné materiály použijte k integraci Razor komponent do stránek nebo zobrazení existující Razor aplikace Pages nebo MVC.
Důležité
Použití stránky rozložení (_Layout.cshtml
) s pomocným pomocníkem značky komponenty pro komponentu HeadOutlet je nutné k řízení <head>
obsahu, jako je název stránky (PageTitlesoučást) a další hlavní prvky (HeadContentsoučást). Další informace najdete v tématu Řízení hlavního obsahu v aplikacích ASP.NET CoreBlazor.
V souboru rozložení projektu:
Do elementu (Razor
Pages/Shared/_Layout.cshtml
Pages) neboViews/Shared/_Layout.cshtml
MVC přidejte následující<base>
značku a HeadOutlet pomocnou rutinu<head>
značky komponenty:<base href="~/" /> <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
Hodnota
href
(základní cesta aplikace) v předchozím příkladu předpokládá, že se aplikace nachází v kořenové cestě URL (/
). Pokud je aplikace dílčí aplikací, postupujte podle pokynů v části Základní cesta aplikace v článku Hostitel a nasaďte ASP.NET CoreBlazor.Tato komponenta HeadOutlet slouží k vykreslení obsahu hlavy (
<head>
) pro názvy stránek (PageTitle součást) a další hlavní prvky (HeadContent komponenta) nastavené komponentami Razor . Další informace najdete v tématu Řízení hlavního obsahu v aplikacích ASP.NET CoreBlazor.<script>
Přidejte značkublazor.server.js
skriptu bezprostředně předScripts
oddíl vykreslení (@await RenderSectionAsync(...)
) v rozložení aplikace.Pages/Shared/_Layout.cshtml
(Razor Pages) neboViews/Shared/_Layout.cshtml
(MVC):<script src="_framework/blazor.server.js"></script>
Architektura přidá
blazor.server.js
skript do aplikace. Do aplikace nemusíte ručně přidávatblazor.server.js
soubor skriptu.
Přidejte soubor importu do kořenové složky projektu s následujícím obsahem.
{APP NAMESPACE}
Změňte zástupný symbol na obor názvů projektu._Imports.razor
:@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using {APP NAMESPACE}
Blazor Server Zaregistrujte služby, ve
Program.cs
kterých jsou služby zaregistrované:builder.Services.AddServerSideBlazor();
Blazor Přidejte koncový bod centra do koncových bodů
Program.cs
, ve kterých se mapují trasy.Za voláním
MapRazorPages
(Razor Pages) neboMapControllerRoute
(MVC) umístěte následující řádek:app.MapBlazorHub();
Integrujte komponenty do libovolné stránky nebo zobrazení. Přidejte například komponentu
Counter
do složky projektuShared
.Pages/Shared/Counter.razor
(Razor Pages) neboViews/Shared/Counter.razor
(MVC):<h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Razor Stránky:
Na stránce Razor projektu
Index
aplikace Pages přidejteCounter
obor názvů komponenty a vložte ji do stránky. Když seIndex
stránka načte, komponentaCounter
je na stránce předem vyřazována. V následujícím příkladu nahraďte{APP NAMESPACE}
zástupný symbol oborem názvů projektu.Pages/Index.cshtml
:@page @using {APP NAMESPACE}.Pages.Shared @model IndexModel @{ ViewData["Title"] = "Home page"; } <component type="typeof(Counter)" render-mode="ServerPrerendered" />
MVC:
V zobrazení projektu
Index
aplikace MVC přidejteCounter
obor názvů komponenty a vložte ji do zobrazení. Když seIndex
zobrazení načte, komponentaCounter
je na stránce předem vyřazována. V následujícím příkladu nahraďte{APP NAMESPACE}
zástupný symbol oborem názvů projektu.Views/Home/Index.cshtml
:@using {APP NAMESPACE}.Views.Shared @{ ViewData["Title"] = "Home Page"; } <component type="typeof(Counter)" render-mode="ServerPrerendered" />
Další informace najdete v části Vykreslovat komponenty ze stránky nebo zobrazení .
Použití směrovatelných komponent v Razor aplikaci Pages
Tato část se týká přidání komponent, které jsou přímo směrovatelné z uživatelských požadavků.
Podpora směrovatelných Razor komponent v Razor aplikacích Pages:
Postupujte podle pokynů v části Konfigurace .
Přidejte komponentu
App
do kořenového adresáře projektu s následujícím obsahem.App.razor
:@using Microsoft.AspNetCore.Components.Routing <Router AppAssembly="typeof(App).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" /> </Found> <NotFound> <PageTitle>Not found</PageTitle> <p role="alert">Sorry, there's nothing at this address.</p> </NotFound> </Router>
_Host
Přidejte do projektu stránku s následujícím obsahem.Pages/_Host.cshtml
:@page "/blazor" @namespace {APP NAMESPACE}.Pages.Shared @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @{ Layout = "_Layout"; } <component type="typeof(App)" render-mode="ServerPrerendered" />
V tomto scénáři komponenty používají sdílený
_Layout.cshtml
soubor pro jejich rozložení.Důležité
Použití stránky rozložení (
_Layout.cshtml
) s pomocným pomocníkem značky komponenty pro komponentu HeadOutlet je nutné k řízení<head>
obsahu, jako je název stránky (PageTitlesoučást) a další hlavní prvky (HeadContentsoučást). Další informace najdete v tématu Řízení hlavního obsahu v aplikacích ASP.NET CoreBlazor.RenderMode nakonfiguruje, jestli komponenta
App
:- Je předem vytáhlý na stránku.
- Je vykreslen jako statický kód HTML na stránce nebo pokud obsahuje potřebné informace ke spuštění Blazor aplikace z uživatelského agenta.
Další informace o pomocné rutině značky komponenty, včetně předávání parametrů a RenderMode konfigurace, naleznete v nápovědě značky komponenty v ASP.NET Core.
Program.cs
Do koncových bodů přidejte trasu s nízkou prioritou pro_Host
stránku jako poslední koncový bod:app.MapFallbackToPage("/_Host");
Přidejte do projektu směrovatelné komponenty. Následující příklad je komponenta
RoutableCounter
založená naCounter
komponentě Blazor v šablonách projektu.Pages/RoutableCounter.razor
:@page "/routable-counter" <PageTitle>Routable Counter</PageTitle> <h1>Routable Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Spusťte projekt a přejděte na směrovatelnou
RoutableCounter
komponentu na adrese/routable-counter
.
Použití směrovatelných komponent v aplikaci MVC
Tato část se týká přidání komponent, které jsou přímo směrovatelné z uživatelských požadavků.
Podpora směrovatelných Razor komponent v aplikacích MVC:
Postupujte podle pokynů v části Konfigurace .
Přidejte komponentu
App
do kořenového adresáře projektu s následujícím obsahem.App.razor
:@using Microsoft.AspNetCore.Components.Routing <Router AppAssembly="typeof(App).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" /> </Found> <NotFound> <PageTitle>Not found</PageTitle> <p role="alert">Sorry, there's nothing at this address.</p> </NotFound> </Router>
_Host
Přidejte do projektu zobrazení s následujícím obsahem.Views/Home/_Host.cshtml
:@namespace {APP NAMESPACE}.Views.Shared @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @{ Layout = "_Layout"; } <component type="typeof(App)" render-mode="ServerPrerendered" />
Komponenty používají sdílený
_Layout.cshtml
soubor pro jejich rozložení.Důležité
Použití stránky rozložení (
_Layout.cshtml
) s pomocným pomocníkem značky komponenty pro komponentu HeadOutlet je nutné k řízení<head>
obsahu, jako je název stránky (PageTitlesoučást) a další hlavní prvky (HeadContentsoučást). Další informace najdete v tématu Řízení hlavního obsahu v aplikacích ASP.NET CoreBlazor.RenderMode nakonfiguruje, jestli komponenta
App
:- Je předem vytáhlý na stránku.
- Je vykreslen jako statický kód HTML na stránce nebo pokud obsahuje potřebné informace ke spuštění Blazor aplikace z uživatelského agenta.
Další informace o pomocné rutině značky komponenty, včetně předávání parametrů a RenderMode konfigurace, naleznete v nápovědě značky komponenty v ASP.NET Core.
Přidejte akci do Home kontroleru.
Controllers/HomeController.cs
:public IActionResult Blazor() { return View("_Host"); }
Program.cs
Do koncových bodů přidejte trasu s nízkou prioritou pro akci kontroleru, která vrací_Host
zobrazení:app.MapFallbackToController("Blazor", "Home");
Vytvořte
Pages
složku v aplikaci MVC a přidejte směrovatelné komponenty. Následující příklad je komponentaRoutableCounter
založená naCounter
komponentě Blazor v šablonách projektu.Pages/RoutableCounter.razor
:@page "/routable-counter" <PageTitle>Routable Counter</PageTitle> <h1>Routable Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Spusťte projekt a přejděte na směrovatelnou
RoutableCounter
komponentu na adrese/routable-counter
.
Vykreslení komponent ze stránky nebo zobrazení
Tato část se týká přidávání komponent na stránky nebo zobrazení, kde nejsou komponenty směrovatelné přímo z uživatelských požadavků.
Pokud chcete vykreslit součást ze stránky nebo zobrazení, použijte pomocnou rutinu značky komponenty.
Vykreslení stavových interaktivních komponent
Stavové interaktivní komponenty lze přidat na Razor stránku nebo zobrazení.
Při vykreslení stránky nebo zobrazení:
- Komponenta je předem vytyčována stránkou nebo zobrazením.
- Počáteční stav součásti použitý pro předkreslování je ztracen.
- Při navázání připojení se vytvoří SignalR nový stav komponenty.
Razor Následující stránka vykreslí komponentuCounter
:
<h1>Razor Page</h1>
<component type="typeof(Counter)" render-mode="ServerPrerendered"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
Další informace naleznete v nápovědě značky komponenty v ASP.NET Core.
Důležité
Použití stránky rozložení (_Layout.cshtml
) s pomocným pomocníkem značky komponenty pro komponentu HeadOutlet je nutné k řízení <head>
obsahu, jako je název stránky (PageTitlesoučást) a další hlavní prvky (HeadContentsoučást). Další informace najdete v tématu Řízení hlavního obsahu v aplikacích ASP.NET CoreBlazor.
Vykreslení neinteraktivních komponent
Na následující Razor stránce Counter
se komponenta staticky vykreslí s počáteční hodnotou zadanou pomocí formuláře. Vzhledem k tomu, že se komponenta staticky vykresluje, není komponenta interaktivní:
<h1>Razor Page</h1>
<form>
<input type="number" asp-for="InitialValue" />
<button type="submit">Set initial value</button>
</form>
<component type="typeof(Counter)" render-mode="Static"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
Další informace naleznete v nápovědě značky komponenty v ASP.NET Core.
Důležité
Použití stránky rozložení (_Layout.cshtml
) s pomocným pomocníkem značky komponenty pro komponentu HeadOutlet je nutné k řízení <head>
obsahu, jako je název stránky (PageTitlesoučást) a další hlavní prvky (HeadContentsoučást). Další informace najdete v tématu Řízení hlavního obsahu v aplikacích ASP.NET CoreBlazor.
Obory názvů komponent
Při použití vlastní složky k uložení součástí projektu Razor přidejte obor názvů představující složku do stránky nebo zobrazení nebo do _ViewImports.cshtml
souboru. V následujícím příkladu:
- Komponenty jsou uloženy ve
Components
složce projektu. - Zástupný
{APP NAMESPACE}
symbol je obor názvů projektu.Components
představuje název složky.
@using {APP NAMESPACE}.Components
Soubor _ViewImports.cshtml
se nachází ve Pages
složce Razor aplikace Pages nebo Views
ve složce aplikace MVC.
Další informace najdete v tématu ASP.NET základní Razor komponenty.
Trvalý předsekenderovaný stav
Bez trvalého předrenderovaného stavu dojde ke ztrátě stavu použitého při předrenderování a při úplném načtení aplikace se musí znovu vytvořit. Pokud je nějaký stav nastaven asynchronně, uživatelské rozhraní může blikáním blikáním, protože se předsekunuté uživatelské rozhraní nahradí dočasnými zástupnými symboly a pak se znovu plně vykreslí.
Chcete-li tyto problémy vyřešit, Blazor podporuje zachování stavu na předem vyřazené stránce pomocí pomocné rutiny značky stavu trvalé součásti. Přidejte značku <persist-component-state />
pomocné rutiny značky uvnitř uzavírací </body>
značky.
Pages/_Layout.cshtml
:
<body>
...
<persist-component-state />
</body>
Rozhodněte se, jaký stav se má služba zachovat PersistentComponentState . PersistentComponentState.RegisterOnPersisting
zaregistruje zpětné volání pro zachování stavu komponenty před pozastavením aplikace. Stav se načte při obnovení aplikace.
Následující příklad je aktualizovaná verze FetchData
komponenty na Blazor základě šablony projektu. Komponenta WeatherForecastPreserveState
zachová stav předpovědi počasí během předkončování a pak načte stav, který komponentu inicializuje. Pomocné rutiny značky stavu součásti zachová stav komponenty po všech vyvolání komponent.
Pages/WeatherForecastPreserveState.razor
:
@page "/weather-forecast-preserve-state"
@implements IDisposable
@using BlazorSample.Shared
@inject IWeatherForecastService WeatherForecastService
@inject PersistentComponentState ApplicationState
<PageTitle>Weather Forecast</PageTitle>
<h1>Weather forecast</h1>
<p>This component demonstrates fetching data from the server.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[] forecasts = Array.Empty<WeatherForecast>();
private PersistingComponentStateSubscription persistingSubscription;
protected override async Task OnInitializedAsync()
{
persistingSubscription =
ApplicationState.RegisterOnPersisting(PersistForecasts);
if (!ApplicationState.TryTakeFromJson<WeatherForecast[]>(
"fetchdata", out var restored))
{
forecasts =
await WeatherForecastService.GetForecastAsync(DateTime.Now);
}
else
{
forecasts = restored!;
}
}
private Task PersistForecasts()
{
ApplicationState.PersistAsJson("fetchdata", forecasts);
return Task.CompletedTask;
}
void IDisposable.Dispose()
{
persistingSubscription.Dispose();
}
}
Inicializací komponent se stejným stavem, který se používá během předkončování, se všechny nákladné kroky inicializace spustí pouze jednou. Vykreslené uživatelské rozhraní se také shoduje s předem vykresleným uživatelským rozhraním, takže v prohlížeči nedojde k žádnému blikání.
Trvalý prerenderovaný stav se přenese do klienta, kde se používá k obnovení stavu komponenty. ASP.NET Základní ochrana dat zajišťuje, aby se data bezpečně přenášela v Blazor Server aplikacích.
Předem vytyčovaná velikost stavu a SignalR omezení velikosti zprávy
Velká předsekunutá velikost stavu může překročit BlazorSignalR limit velikosti zprávy okruhu, což má za následek následující:
- Okruh SignalR se nepodaří inicializovat s chybou v klientovi: Circuit host not initialized.
- Uživatelské rozhraní pro opětovné připojení v klientovi se zobrazí, když okruh selže. Obnovení není možné.
Pokud chcete tento problém vyřešit, použijte některý z následujících přístupů:
- Snižte množství dat, která vkládáte do předkažovaného stavu.
- SignalR Zvětšete limit velikosti zprávy. UPOZORNĚNÍ: Zvýšení limitu může zvýšit riziko útoků DoS (DoS).
Další Blazor Server zdroje informací
- Správa stavu: Zpracování předkreslování
- Razor předměty životního cyklu komponent, které se týkají předběžného provedení
- Ověřování a autorizace: Obecné aspekty
- Zpracování chyb: Prerendering
- Hostitel a nasazení: Blazor Server
- Zmírnění hrozeb: Skriptování mezi weby (XSS)
Prerendering může zlepšit optimalizaci vyhledávacího webu (SEO) vykreslením obsahu pro počáteční odpověď HTTP, kterou můžou vyhledávací weby použít k výpočtu pořadí stránek.
Po dokončení konfigurace projektu použijte pokyny v následujících částech v závislosti na požadavcích projektu:
- Směrovatelné komponenty: Pro komponenty, které jsou přímo směrovatelné z uživatelských požadavků. Postupujte podle těchto pokynů, když by návštěvníci měli být schopni vytvořit požadavek HTTP v prohlížeči pro komponentu s direktivou
@page
. - Vykreslení komponent ze stránky nebo zobrazení: Pro komponenty, které nejsou přímo směrovatelné z uživatelských požadavků. Při vkládání komponent do existujících stránek nebo zobrazení pomocí pomocné rutiny značek komponent postupujte podle těchto pokynů.
Konfigurace
Existující Razor aplikace Pages nebo MVC může integrovat Razor komponenty do stránek nebo zobrazení:
V souboru rozložení projektu:
Do elementu (Pages) nebo
Views/Shared/_Layout.cshtml
(MVC) přidejte následující<base>
značku:Razor<head>
Pages/Shared/_Layout.cshtml
<base href="~/" />
Hodnota
href
(základní cesta aplikace) v předchozím příkladu předpokládá, že se aplikace nachází v kořenové cestě URL (/
). Pokud je aplikace dílčí aplikací, postupujte podle pokynů v části Základní cesta aplikace v článku Hostitel a nasaďte ASP.NET CoreBlazor.<script>
Přidejte značkublazor.server.js
skriptu bezprostředně předScripts
oddíl vykreslení.Pages/Shared/_Layout.cshtml
(Razor Pages) neboViews/Shared/_Layout.cshtml
(MVC):... <script src="_framework/blazor.server.js"></script> @await RenderSectionAsync("Scripts", required: false) </body>
Architektura přidá
blazor.server.js
skript do aplikace. Do aplikace nemusíte ručně přidávatblazor.server.js
soubor skriptu.
Přidejte soubor importu do kořenové složky projektu s následujícím obsahem.
{APP NAMESPACE}
Změňte zástupný symbol na obor názvů projektu._Imports.razor
:@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using {APP NAMESPACE}
Blazor Server Zaregistrujte službu v
Startup.ConfigureServices
.V
Startup.cs
:services.AddServerSideBlazor();
Blazor Přidejte koncový bod centra do koncových bodů (
app.UseEndpoints
) zStartup.Configure
.Startup.cs
:endpoints.MapBlazorHub();
Integrujte komponenty do libovolné stránky nebo zobrazení. Přidejte například komponentu
Counter
do složky projektuShared
.Pages/Shared/Counter.razor
(Razor Pages) neboViews/Shared/Counter.razor
(MVC):<h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Razor Stránky:
Na stránce Razor projektu
Index
aplikace Pages přidejteCounter
obor názvů komponenty a vložte ji do stránky. Když seIndex
stránka načte, komponentaCounter
je na stránce předem vyřazována. V následujícím příkladu nahraďte{APP NAMESPACE}
zástupný symbol oborem názvů projektu.Pages/Index.cshtml
:@page @using {APP NAMESPACE}.Pages.Shared @model IndexModel @{ ViewData["Title"] = "Home page"; } <div> <component type="typeof(Counter)" render-mode="ServerPrerendered" /> </div>
V předchozím příkladu nahraďte
{APP NAMESPACE}
zástupný symbol oborem názvů aplikace.MVC:
V zobrazení projektu
Index
aplikace MVC přidejteCounter
obor názvů komponenty a vložte ji do zobrazení. Když seIndex
zobrazení načte, komponentaCounter
je na stránce předem vyřazována. V následujícím příkladu nahraďte{APP NAMESPACE}
zástupný symbol oborem názvů projektu.Views/Home/Index.cshtml
:@using {APP NAMESPACE}.Views.Shared @{ ViewData["Title"] = "Home Page"; } <div> <component type="typeof(Counter)" render-mode="ServerPrerendered" /> </div>
Další informace najdete v části Vykreslovat komponenty ze stránky nebo zobrazení .
Použití směrovatelných komponent v Razor aplikaci Pages
Tato část se týká přidání komponent, které jsou přímo směrovatelné z uživatelských požadavků.
Podpora směrovatelných Razor komponent v Razor aplikacích Pages:
Postupujte podle pokynů v části Konfigurace .
Přidejte komponentu
App
do kořenového adresáře projektu s následujícím obsahem.App.razor
:@using Microsoft.AspNetCore.Components.Routing <Router AppAssembly="typeof(Program).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" /> </Found> <NotFound> <h1>Page not found</h1> <p>Sorry, but there's nothing here!</p> </NotFound> </Router>
Poznámka:
S vydáním ASP.NET Core 5.0.1 a pro všechny další verze 5.x komponenta
Router
zahrnuje parametrPreferExactMatches
nastavený na@true
. Další informace najdete v tématu Migrace z ASP.NET Core 3.1 na verzi 5.0._Host
Přidejte do projektu stránku s následujícím obsahem.Pages/_Host.cshtml
:@page "/blazor" @{ Layout = "_Layout"; } <app> <component type="typeof(App)" render-mode="ServerPrerendered" /> </app>
Komponenty používají sdílený
_Layout.cshtml
soubor pro jejich rozložení.RenderMode nakonfiguruje, jestli komponenta
App
:- Je předem vytáhlý na stránku.
- Je vykreslen jako statický kód HTML na stránce nebo pokud obsahuje potřebné informace ke spuštění Blazor aplikace z uživatelského agenta.
Další informace o pomocné rutině značky komponenty, včetně předávání parametrů a RenderMode konfigurace, naleznete v nápovědě značky komponenty v ASP.NET Core.
Startup.Configure
Do koncových bodůStartup.cs
přidejte trasu s nízkou prioritou pro_Host
stránku jako poslední koncový bod:endpoints.MapFallbackToPage("/_Host");
Následující příklad ukazuje přidaný řádek v typické konfiguraci koncového bodu aplikace:
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); });
Přidejte do projektu směrovatelné komponenty.
Pages/RoutableCounter.razor
:@page "/routable-counter" <h1>Routable Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Spusťte projekt a přejděte na směrovatelnou
RoutableCounter
komponentu na adrese/routable-counter
.
Použití směrovatelných komponent v aplikaci MVC
Tato část se týká přidání komponent, které jsou přímo směrovatelné z uživatelských požadavků.
Podpora směrovatelných Razor komponent v aplikacích MVC:
Postupujte podle pokynů v části Konfigurace .
Přidejte komponentu
App
do kořenového adresáře projektu s následujícím obsahem.App.razor
:@using Microsoft.AspNetCore.Components.Routing <Router AppAssembly="typeof(Program).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" /> </Found> <NotFound> <h1>Page not found</h1> <p>Sorry, but there's nothing here!</p> </NotFound> </Router>
Poznámka:
S vydáním ASP.NET Core 5.0.1 a pro všechny další verze 5.x komponenta
Router
zahrnuje parametrPreferExactMatches
nastavený na@true
. Další informace najdete v tématu Migrace z ASP.NET Core 3.1 na verzi 5.0._Host
Přidejte do projektu zobrazení s následujícím obsahem.Views/Home/_Host.cshtml
:@{ Layout = "_Layout"; } <app> <component type="typeof(App)" render-mode="ServerPrerendered" /> </app>
Komponenty používají sdílený
_Layout.cshtml
soubor pro jejich rozložení.RenderMode nakonfiguruje, jestli komponenta
App
:- Je předem vytáhlý na stránku.
- Je vykreslen jako statický kód HTML na stránce nebo pokud obsahuje potřebné informace ke spuštění Blazor aplikace z uživatelského agenta.
Další informace o pomocné rutině značky komponenty, včetně předávání parametrů a RenderMode konfigurace, naleznete v nápovědě značky komponenty v ASP.NET Core.
Přidejte akci do Home kontroleru.
Controllers/HomeController.cs
:public IActionResult Blazor() { return View("_Host"); }
Startup.Configure
Do koncových bodůStartup.cs
přidejte trasu s nízkou prioritou pro akci kontroleru, která vrátí_Host
zobrazení:endpoints.MapFallbackToController("Blazor", "Home");
Následující příklad ukazuje přidaný řádek v typické konfiguraci koncového bodu aplikace:
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapBlazorHub(); endpoints.MapFallbackToController("Blazor", "Home"); });
Přidejte do projektu směrovatelné komponenty.
Pages/RoutableCounter.razor
:@page "/routable-counter" <h1>Routable Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Spusťte projekt a přejděte na směrovatelnou
RoutableCounter
komponentu na adrese/routable-counter
.
Vykreslení komponent ze stránky nebo zobrazení
Tato část se týká přidávání komponent na stránky nebo zobrazení, kde nejsou komponenty směrovatelné přímo z uživatelských požadavků.
Pokud chcete vykreslit součást ze stránky nebo zobrazení, použijte pomocnou rutinu značky komponenty.
Vykreslení stavových interaktivních komponent
Stavové interaktivní komponenty lze přidat na Razor stránku nebo zobrazení.
Při vykreslení stránky nebo zobrazení:
- Komponenta je předem vytyčována stránkou nebo zobrazením.
- Počáteční stav součásti použitý pro předkreslování je ztracen.
- Při navázání připojení se vytvoří SignalR nový stav komponenty.
Razor Následující stránka vykreslí komponentuCounter
:
<h1>My Razor Page</h1>
<component type="typeof(Counter)" render-mode="ServerPrerendered"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
Další informace naleznete v nápovědě značky komponenty v ASP.NET Core.
Vykreslení neinteraktivních komponent
Na následující Razor stránce Counter
se komponenta staticky vykreslí s počáteční hodnotou zadanou pomocí formuláře. Vzhledem k tomu, že se komponenta staticky vykresluje, není komponenta interaktivní:
<h1>My Razor Page</h1>
<form>
<input type="number" asp-for="InitialValue" />
<button type="submit">Set initial value</button>
</form>
<component type="typeof(Counter)" render-mode="Static"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
Další informace naleznete v nápovědě značky komponenty v ASP.NET Core.
Obory názvů komponent
Při použití vlastní složky k uložení součástí projektu Razor přidejte obor názvů představující složku do stránky nebo zobrazení nebo do _ViewImports.cshtml
souboru. V následujícím příkladu:
- Komponenty jsou uloženy ve
Components
složce projektu. - Zástupný
{APP NAMESPACE}
symbol je obor názvů projektu.Components
představuje název složky.
@using {APP NAMESPACE}.Components
Soubor _ViewImports.cshtml
se nachází ve Pages
složce Razor aplikace Pages nebo Views
ve složce aplikace MVC.
Další informace najdete v tématu ASP.NET základní Razor komponenty.
Předem vytyčovaná velikost stavu a SignalR omezení velikosti zprávy
Velká předsekunutá velikost stavu může překročit BlazorSignalR limit velikosti zprávy okruhu, což má za následek následující:
- Okruh SignalR se nepodaří inicializovat s chybou v klientovi: Circuit host not initialized.
- Uživatelské rozhraní pro opětovné připojení v klientovi se zobrazí, když okruh selže. Obnovení není možné.
Pokud chcete tento problém vyřešit, použijte některý z následujících přístupů:
- Snižte množství dat, která vkládáte do předkažovaného stavu.
- SignalR Zvětšete limit velikosti zprávy. UPOZORNĚNÍ: Zvýšení limitu může zvýšit riziko útoků DoS (DoS).
Další Blazor Server zdroje informací
- Správa stavu: Zpracování předkreslování
- Razor předměty životního cyklu komponent, které se týkají předběžného provedení
- Ověřování a autorizace: Obecné aspekty
- Zpracování chyb: Prerendering
- Hostitel a nasazení: Blazor Server
- Zmírnění hrozeb: Skriptování mezi weby (XSS)
Razor komponenty lze integrovat do Razor aplikací Pages nebo MVC. Při vykreslení stránky nebo zobrazení je možné předem vykreslit komponenty současně.
Prerendering může zlepšit optimalizaci vyhledávacího webu (SEO) vykreslením obsahu pro počáteční odpověď HTTP, kterou můžou vyhledávací weby použít k výpočtu pořadí stránek.
Po dokončení konfigurace projektu použijte pokyny v následujících částech v závislosti na požadavcích projektu:
- Směrovatelné komponenty: Pro komponenty, které jsou přímo směrovatelné z uživatelských požadavků. Postupujte podle těchto pokynů, když by návštěvníci měli být schopni vytvořit požadavek HTTP v prohlížeči pro komponentu s direktivou
@page
. - Vykreslení komponent ze stránky nebo zobrazení: Pro komponenty, které nejsou přímo směrovatelné z uživatelských požadavků. Při vkládání komponent do existujících stránek nebo zobrazení pomocí pomocné rutiny značek komponent postupujte podle těchto pokynů.
Konfigurace
Existující Razor aplikace Pages nebo MVC může integrovat Razor komponenty do stránek nebo zobrazení:
V souboru rozložení projektu:
Do elementu (Pages) nebo
Views/Shared/_Layout.cshtml
(MVC) přidejte následující<base>
značku:Razor<head>
Pages/Shared/_Layout.cshtml
+ <base href="~/" />
Hodnota
href
(základní cesta aplikace) v předchozím příkladu předpokládá, že se aplikace nachází v kořenové cestě URL (/
). Pokud je aplikace dílčí aplikací, postupujte podle pokynů v části Základní cesta aplikace v článku Hostitel a nasaďte ASP.NET CoreBlazor.<script>
Přidejte značkublazor.server.js
skriptu bezprostředně předScripts
oddíl vykreslení.Pages/Shared/_Layout.cshtml
(Razor Pages) neboViews/Shared/_Layout.cshtml
(MVC):... <script src="_framework/blazor.server.js"></script> @await RenderSectionAsync("Scripts", required: false) </body>
Architektura přidá
blazor.server.js
skript do aplikace. Do aplikace nemusíte ručně přidávatblazor.server.js
soubor skriptu.
Přidejte soubor importu do kořenové složky projektu s následujícím obsahem.
{APP NAMESPACE}
Změňte zástupný symbol na obor názvů projektu._Imports.razor
:@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using {APP NAMESPACE}
Blazor Server Zaregistrujte službu v
Startup.ConfigureServices
.Startup.cs
:services.AddServerSideBlazor();
Blazor Přidejte koncový bod centra do koncových bodů (
app.UseEndpoints
) zStartup.Configure
.Startup.cs
:endpoints.MapBlazorHub();
Integrujte komponenty do libovolné stránky nebo zobrazení. Přidejte například komponentu
Counter
do složky projektuShared
.Pages/Shared/Counter.razor
(Razor Pages) neboViews/Shared/Counter.razor
(MVC):<h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Razor Stránky:
Na stránce Razor projektu
Index
aplikace Pages přidejteCounter
obor názvů komponenty a vložte ji do stránky. Když seIndex
stránka načte, komponentaCounter
je na stránce předem vyřazována. V následujícím příkladu nahraďte{APP NAMESPACE}
zástupný symbol oborem názvů projektu.Pages/Index.cshtml
:@page @using {APP NAMESPACE}.Pages.Shared @model IndexModel @{ ViewData["Title"] = "Home page"; } <div> <component type="typeof(Counter)" render-mode="ServerPrerendered" /> </div>
V předchozím příkladu nahraďte
{APP NAMESPACE}
zástupný symbol oborem názvů aplikace.MVC:
V zobrazení projektu
Index
aplikace MVC přidejteCounter
obor názvů komponenty a vložte ji do zobrazení. Když seIndex
zobrazení načte, komponentaCounter
je na stránce předem vyřazována. V následujícím příkladu nahraďte{APP NAMESPACE}
zástupný symbol oborem názvů projektu.Views/Home/Index.cshtml
:@using {APP NAMESPACE}.Views.Shared @{ ViewData["Title"] = "Home Page"; } <div> <component type="typeof(Counter)" render-mode="ServerPrerendered" /> </div>
Další informace najdete v části Vykreslovat komponenty ze stránky nebo zobrazení .
Použití směrovatelných komponent v Razor aplikaci Pages
Tato část se týká přidání komponent, které jsou přímo směrovatelné z uživatelských požadavků.
Podpora směrovatelných Razor komponent v Razor aplikacích Pages:
Postupujte podle pokynů v části Konfigurace .
Přidejte komponentu
App
do kořenového adresáře projektu s následujícím obsahem.App.razor
:@using Microsoft.AspNetCore.Components.Routing <Router AppAssembly="typeof(Program).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" /> </Found> <NotFound> <h1>Page not found</h1> <p>Sorry, but there's nothing here!</p> </NotFound> </Router>
_Host
Přidejte do projektu stránku s následujícím obsahem.Pages/_Host.cshtml
:@page "/blazor" @{ Layout = "_Layout"; } <app> <component type="typeof(App)" render-mode="ServerPrerendered" /> </app>
Komponenty používají sdílený
_Layout.cshtml
soubor pro jejich rozložení.RenderMode nakonfiguruje, jestli komponenta
App
:- Je předem vytáhlý na stránku.
- Je vykreslen jako statický kód HTML na stránce nebo pokud obsahuje potřebné informace ke spuštění Blazor aplikace z uživatelského agenta.
Další informace o pomocné rutině značky komponenty, včetně předávání parametrů a RenderMode konfigurace, naleznete v nápovědě značky komponenty v ASP.NET Core.
Startup.Configure
Do koncových bodůStartup.cs
přidejte trasu s nízkou prioritou pro_Host
stránku jako poslední koncový bod:endpoints.MapFallbackToPage("/_Host");
Následující příklad ukazuje přidaný řádek v typické konfiguraci koncového bodu aplikace:
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); });
Přidejte do projektu směrovatelné komponenty.
Pages/RoutableCounter.razor
:@page "/routable-counter" <h1>Routable Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Spusťte projekt a přejděte na směrovatelnou
RoutableCounter
komponentu na adrese/routable-counter
.
Použití směrovatelných komponent v aplikaci MVC
Tato část se týká přidání komponent, které jsou přímo směrovatelné z uživatelských požadavků.
Podpora směrovatelných Razor komponent v aplikacích MVC:
Postupujte podle pokynů v části Konfigurace .
Přidejte komponentu
App
do kořenového adresáře projektu s následujícím obsahem.App.razor
:@using Microsoft.AspNetCore.Components.Routing <Router AppAssembly="typeof(Program).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" /> </Found> <NotFound> <h1>Page not found</h1> <p>Sorry, but there's nothing here!</p> </NotFound> </Router>
_Host
Přidejte do projektu zobrazení s následujícím obsahem.Views/Home/_Host.cshtml
:@{ Layout = "_Layout"; } <app> <component type="typeof(App)" render-mode="ServerPrerendered" /> </app>
Komponenty používají sdílený
_Layout.cshtml
soubor pro jejich rozložení.RenderMode nakonfiguruje, jestli komponenta
App
:- Je předem vytáhlý na stránku.
- Je vykreslen jako statický kód HTML na stránce nebo pokud obsahuje potřebné informace ke spuštění Blazor aplikace z uživatelského agenta.
Další informace o pomocné rutině značky komponenty, včetně předávání parametrů a RenderMode konfigurace, naleznete v nápovědě značky komponenty v ASP.NET Core.
Přidejte akci do Home kontroleru.
Controllers/HomeController.cs
:public IActionResult Blazor() { return View("_Host"); }
Startup.Configure
Do koncových bodůStartup.cs
přidejte trasu s nízkou prioritou pro akci kontroleru, která vrátí_Host
zobrazení:endpoints.MapFallbackToController("Blazor", "Home");
Následující příklad ukazuje přidaný řádek v typické konfiguraci koncového bodu aplikace:
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapBlazorHub(); endpoints.MapFallbackToController("Blazor", "Home"); });
Přidejte do projektu směrovatelné komponenty.
Pages/RoutableCounter.razor
:@page "/routable-counter" <h1>Routable Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
Spusťte projekt a přejděte na směrovatelnou
RoutableCounter
komponentu na adrese/routable-counter
.
Vykreslení komponent ze stránky nebo zobrazení
Tato část se týká přidávání komponent na stránky nebo zobrazení, kde nejsou komponenty směrovatelné přímo z uživatelských požadavků.
Pokud chcete vykreslit součást ze stránky nebo zobrazení, použijte pomocnou rutinu značky komponenty.
Vykreslení stavových interaktivních komponent
Stavové interaktivní komponenty lze přidat na Razor stránku nebo zobrazení.
Při vykreslení stránky nebo zobrazení:
- Komponenta je předem vytyčována stránkou nebo zobrazením.
- Počáteční stav součásti použitý pro předkreslování je ztracen.
- Při navázání připojení se vytvoří SignalR nový stav komponenty.
Razor Následující stránka vykreslí komponentuCounter
:
<h1>My Razor Page</h1>
<component type="typeof(Counter)" render-mode="ServerPrerendered"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
Další informace naleznete v nápovědě značky komponenty v ASP.NET Core.
Vykreslení neinteraktivních komponent
Na následující Razor stránce Counter
se komponenta staticky vykreslí s počáteční hodnotou zadanou pomocí formuláře. Vzhledem k tomu, že se komponenta staticky vykresluje, není komponenta interaktivní:
<h1>My Razor Page</h1>
<form>
<input type="number" asp-for="InitialValue" />
<button type="submit">Set initial value</button>
</form>
<component type="typeof(Counter)" render-mode="Static"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
Další informace naleznete v nápovědě značky komponenty v ASP.NET Core.
Obory názvů komponent
Při použití vlastní složky k uložení součástí projektu Razor přidejte obor názvů představující složku do stránky nebo zobrazení nebo do _ViewImports.cshtml
souboru. V následujícím příkladu:
- Komponenty jsou uloženy ve
Components
složce projektu. - Zástupný
{APP NAMESPACE}
symbol je obor názvů projektu.Components
představuje název složky.
@using {APP NAMESPACE}.Components
Soubor _ViewImports.cshtml
se nachází ve Pages
složce Razor aplikace Pages nebo Views
ve složce aplikace MVC.
Další informace najdete v tématu ASP.NET základní Razor komponenty.
Předem vytyčovaná velikost stavu a SignalR omezení velikosti zprávy
Velká předsekunutá velikost stavu může překročit BlazorSignalR limit velikosti zprávy okruhu, což má za následek následující:
- Okruh SignalR se nepodaří inicializovat s chybou v klientovi: Circuit host not initialized.
- Uživatelské rozhraní pro opětovné připojení v klientovi se zobrazí, když okruh selže. Obnovení není možné.
Pokud chcete tento problém vyřešit, použijte některý z následujících přístupů:
- Snižte množství dat, která vkládáte do předkažovaného stavu.
- SignalR Zvětšete limit velikosti zprávy. UPOZORNĚNÍ: Zvýšení limitu může zvýšit riziko útoků DoS (DoS).
Další Blazor Server zdroje informací
- Správa stavu: Zpracování předkreslování
- Razor předměty životního cyklu komponent, které se týkají předběžného provedení
- Ověřování a autorizace: Obecné aspekty
- Zpracování chyb: Prerendering
- Hostitel a nasazení: Blazor Server
- Zmírnění hrozeb: Skriptování mezi weby (XSS)