Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információ: .NET és .NET Core támogatási szabályzat. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
Razor összetevők integrálhatók a Pages vagy az MVC alkalmazásokba Razor . Az oldal vagy nézet megjelenítésekor az összetevők egyszerre előrerendelhetők.
Fontos
A keretrendszer ASP.NET Core-kiadásokra vonatkozó változásai a jelen cikkben szereplő utasítások különböző készleteihez vezettek. A cikk útmutatásának használata előtt győződjön meg arról, hogy a jelen cikk tetején található dokumentumverzió-választó megegyezik ASP.NET Core alkalmazáshoz használni kívánt verziójával.
Az előzetes rendezés javíthatja a keresőmotor-optimalizálást (SEO) azáltal, hogy megjeleníti a kezdeti HTTP-válasz tartalmát, amellyel a keresőmotorok kiszámíthatják az oldal rangját.
A projekt konfigurálása után a projekt követelményeitől függően kövesse az alábbi szakaszok útmutatását:
- Felhasználói kérésekből közvetlenül elérhető összetevők esetében. Kövesse ezt az útmutatást, ha a látogatóknak http-kérést kell küldeniük a böngészőjükben egy irányelvvel rendelkező
@pageösszetevőhöz. - Az olyan összetevők esetében, amelyek nem közvetlenül érhetők el felhasználói kérelmekből, lásd a Lap vagy nézet összetevőinek renderelése részt. Kövesse ezt az útmutatást, ha az alkalmazás az összetevőket meglévő lapokba vagy nézetekbe ágyazza be a Komponenscímke súgójával.
Konfiguráció
Az alábbi útmutató segítségével a Razor összetevőket integrálhatja a meglévő Razor Pages vagy MVC alkalmazás lapjaiba vagy nézeteibe.
Adjon hozzá egy importálási fájlt a projekt gyökérmappájába az alábbi tartalommal. Módosítsa a
{APP NAMESPACE}helyőrzőt a projekt névterére._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}A projekt elrendezésfájljában (
Pages/Shared/_Layout.cshtmla Pages-alkalmazásokban Razor vagyViews/Shared/_Layout.cshtmlaz MVC-alkalmazásokban):Adja hozzá a következő
<base>címkét és HeadOutlet összetevőcímkét az<head>elemhez:<base href="~/" /> <component type="typeof(Microsoft.AspNetCore.Components.Web.HeadOutlet)" render-mode="ServerPrerendered" />Az
hrefelőző példában szereplő érték (az alkalmazás alap elérési útja) feltételezi, hogy az alkalmazás a gyökér URL-cím elérési útján (/) található. Ha az alkalmazás egy alalkalmazás, tekintse meg ASP.NET Core-alkalmazás Blazor alap elérési útját.Az HeadOutlet összetevő a fej(
<head>) tartalom renderelésére szolgál, beleértve a lapcímeket (PageTitle összetevő) és az egyéb fejelemeket (HeadContent összetevő), amelyeket az Razor összetevők állítanak be. További információ: Vezérlőfej tartalma ASP.NET Core-alkalmazásokbanBlazor.Adjon hozzá egy címkét
<script>a szkripthez közvetlenül ablazor.server.jsScriptsrenderelési szakasz előtt (@await RenderSectionAsync(...)):<script src="_framework/blazor.server.js"></script>A keretrendszer hozzáadja a
blazor.server.jsszkriptet az alkalmazáshoz. Nincs szükség szkriptfájl manuális hozzáadásárablazor.server.jsaz alkalmazáshoz.
Megjegyzés
Az elrendezés általában egy
_ViewStart.cshtmlfájlon keresztül töltődik be.Regisztrálja a Blazor Server szolgáltatásokat a
Program.cs-ben, ahol a szolgáltatások regisztrálva vannak.builder.Services.AddServerSideBlazor();Adja hozzá a Blazor hubvégpontot azon végpontokhoz
Program.cs, ahol az útvonalak le vannak képezve. Helyezze a következő sort aMapRazorPages(Razor Pages) vagyMapControllerRoute(MVC) hívás után:app.MapBlazorHub();Összetevők integrálása bármely lapba vagy nézetbe. Adjon hozzá például egy összetevőt
Countera projekt mappájábaShared.Pages/Shared/Counter.razor(Razor oldal) vagyViews/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 Oldalak:
A Pages alkalmazás projektjének
Indexoldalán adja hozzá az Razor komponens névterét, és helyezze be az összetevőt az oldalba. Amikor azIndexoldal betöltődik, azCounterösszetevő előrerendelt lesz a lapon. Az alábbi példában cserélje le a{APP NAMESPACE}helyőrzőt a projekt névterére.Pages/Index.cshtml:@page @using {APP NAMESPACE}.Pages.Shared @model IndexModel @{ ViewData["Title"] = "Home page"; } <component type="typeof(Counter)" render-mode="ServerPrerendered" />MVC:
A projekt MVC alkalmazás nézetében adja hozzá az
Indexösszetevő névterét, és ágyazza be a nézetbe az összetevőt. Amikor aIndexnézet betöltődik, azCounterösszetevő előrerendelt lesz a lapon. Az alábbi példában cserélje le a{APP NAMESPACE}helyőrzőt a projekt névterére.Views/Home/Index.cshtml:@using {APP NAMESPACE}.Views.Shared @{ ViewData["Title"] = "Home Page"; } <component type="typeof(Counter)" render-mode="ServerPrerendered" />
További információkért lásd a Komponensek renderelése egy oldalról vagy nézetből szakaszt.
Routable-összetevők használata a Razor Pages-alkalmazásokban
Ez a szakasz olyan összetevők hozzáadására vonatkozik, amelyek közvetlenül a felhasználói kérésekből származnak.
A Pages-alkalmazásokban irányítható Razor összetevők támogatása:
Kövesse a Konfiguráció szakaszban található útmutatást.
Adjon hozzá egy összetevőt
Appa projekt gyökeréhez az alábbi tartalommal.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>Adjon hozzá egy
_Hostlapot a projekthez az alábbi tartalommal. Cserélje le a{APP NAMESPACE}helyőrzőt az alkalmazás névterére.Pages/_Host.cshtml:@page @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <component type="typeof(App)" render-mode="ServerPrerendered" />Megjegyzés
Az előző példa feltételezi, hogy a HeadOutlet összetevőt és a Blazor szkriptet (
_framework/blazor.server.js) az alkalmazás elrendezése jeleníti meg. További információkért tekintse meg a Konfiguráció szakaszt.A .NET 10-ben vagy újabb verziókban a Blazor szkriptet a keretrendszer tartalmazza, ha a projekt legalább egy Razor összetevőfájlt (
.razor) tartalmaz. Ha az alkalmazásnak szüksége van a Blazor szkriptre, de nem tartalmaz legalább egy összetevőt, adja hozzá a következő MSBuild tulajdonságot az alkalmazás projektfájljához, hogy kényszerítse a feltétel nélküli szkriptek felvételét:<RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>RenderMode beállítja, hogy az
Appkomponens:- Előre le van renderelve az oldalra.
- Statikus HTML-ként jelenik meg a lapon, vagy ha tartalmazza a szükséges információkat az alkalmazás indításához a felhasználói ügynöktől Blazor.
Az összetevőcímke-segédről , beleértve a paraméterek és RenderMode a konfiguráció átadását is, a ASP.NET Core összetevőcímke-segédjében talál további információt.
Program.csA végpontokban adjon hozzá egy alacsony prioritású útvonalat az_Hostoldalhoz utolsó végpontként:app.MapFallbackToPage("/_Host");Routolható összetevők hozzáadása a projekthez. Az alábbi példa egy
RoutableCounterösszetevő, amely aCounterprojektsablonok Blazor összetevőjén alapul.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++; } }Futtassa a projektet, és navigáljon az irányítható
RoutableCounterösszetevőhöz/routable-counter.
A névterekről további információt az Összetevő névterek szakaszában talál.
Routable-összetevők használata MVC-alkalmazásokban
Ez a szakasz olyan összetevők hozzáadására vonatkozik, amelyek közvetlenül a felhasználói kérésekből származnak.
Az útvonalazható Razor összetevők támogatása az MVC-alkalmazásokban:
Kövesse a Konfiguráció szakaszban található útmutatást.
Adjon hozzá egy összetevőt
Appa projekt gyökeréhez az alábbi tartalommal.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>Adjon hozzá egy nézetet
_Hosta projekthez az alábbi tartalommal. Cserélje le a{APP NAMESPACE}helyőrzőt az alkalmazás névterére.Views/Home/_Host.cshtml:@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <component type="typeof(App)" render-mode="ServerPrerendered" />Megjegyzés
Az előző példa feltételezi, hogy a HeadOutlet összetevőt és a Blazor szkriptet (
_framework/blazor.server.js) az alkalmazás elrendezése jeleníti meg. További információkért tekintse meg a Konfiguráció szakaszt.A .NET 10-ben vagy újabb verziókban a Blazor szkriptet a keretrendszer tartalmazza, ha a projekt legalább egy Razor összetevőfájlt (
.razor) tartalmaz. Ha az alkalmazásnak szüksége van a Blazor szkriptre, de nem tartalmaz legalább egy összetevőt, adja hozzá a következő MSBuild tulajdonságot az alkalmazás projektfájljához, hogy kényszerítse a feltétel nélküli szkriptek felvételét:<RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>RenderMode beállítja, hogy az
Appkomponens:- Előre le van renderelve az oldalra.
- Statikus HTML-ként jelenik meg a lapon, vagy ha tartalmazza a szükséges információkat az alkalmazás indításához a felhasználói ügynöktől Blazor.
Az összetevőcímke-segédről , beleértve a paraméterek és RenderMode a konfiguráció átadását is, a ASP.NET Core összetevőcímke-segédjében talál további információt.
Adjon hozzá egy műveletet a Home vezérlőhöz.
Controllers/HomeController.cs:public IActionResult Blazor() { return View("_Host"); }Program.csA végpontokban adjon hozzá egy alacsony prioritású útvonalat a nézetet visszaadó_Hostvezérlőművelethez:app.MapFallbackToController("Blazor", "Home");Hozzon létre egy
Pagesmappát az MVC alkalmazásban, és adjon hozzá routable-összetevőket. Az alábbi példa egyRoutableCounterösszetevő, amely aCounterprojektsablonok Blazor összetevőjén alapul.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++; } }Futtassa a projektet, és navigáljon az irányítható
RoutableCounterösszetevőhöz/routable-counter.
A névterekről további információt az Összetevő névterek szakaszában talál.
Összetevők renderelése oldalról vagy nézetből
Ez a szakasz az összetevők lapokhoz vagy nézetekhez való hozzáadására vonatkozik, ahol az összetevők közvetlenül nem kezelhetők a felhasználói kérésekből.
Ha egy összetevőt egy oldalról vagy nézetből szeretne megjeleníteni, használja az Összetevőcímke segédet.
Állapotalapú interaktív összetevők renderelése
Az állapotalapú interaktív összetevők hozzáadhatók egy Razor laphoz vagy nézethez.
Amikor a lap vagy a nézet megjelenítésre kerül:
- Az összetevő előrenderelve van az oldallal vagy a nézettel.
- Az előrendezéshez használt kezdeti összetevőállapot elveszik.
- A kapcsolat létrejöttekor SignalR új összetevőállapot jön létre.
Az alábbi Razor oldal egy összetevőt Counter jelenít meg:
<h1>Razor Page</h1>
<component type="typeof(Counter)" render-mode="ServerPrerendered"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
További információért lásd: Összetevőcímke-segéd az ASP.NET Core-ban.
Neminteraktív összetevők renderelése
A következő Razor lapon az Counter összetevő statikusan jelenik meg egy űrlapon megadott kezdeti értékkel. Mivel az összetevő statikusan renderelt, az összetevő nem interaktív:
<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; }
}
További információért lásd: Összetevőcímke-segéd az ASP.NET Core-ban.
Összetevő névterei
Ha egyéni mappát használ a projekt Razor összetevőinek tárolására, adja hozzá a mappát jelképező névteret a laphoz/nézethez vagy a _ViewImports.cshtml fájlhoz. Az alábbi példában:
- Az összetevők a
Componentsprojekt mappájában vannak tárolva. - A
{APP NAMESPACE}helyőrző a projekt névtere.Componentsa mappa nevét jelöli.
@using {APP NAMESPACE}.Components
A _ViewImports.cshtml fájl a Pages mappában található egy Pages-alkalmazásban vagy a Razor mappában egy MVC-alkalmazásban.
További információ: ASP.NET Core Razor-összetevők.
Előre beállított állapot megőrzése
Az előre beállított állapot megőrzése nélkül az előrendelés során használt állapot elveszik, és újra létre kell hozni az alkalmazás teljes betöltésekor. Ha bármely állapot aszinkron módon van beállítva, a felhasználói felület villanhat, mivel az előre renderelt felhasználói felületet ideiglenesen helyőrző elemek váltják fel, majd újra teljesen renderelődik.
Az előre összeállított összetevők állapotának megőrzéséhez használja a Komponensállapot-címke megőrzése segédet (referenciaforrás). Adja hozzá a Tag Helper címkéjét <persist-component-state /> a lap záró </body> címkéjébe a _Host oldalon, egy olyan alkalmazásban, amely előrendereli a komponenseket.
Megjegyzés
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék közötti váltás legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
Pages/_Host.cshtml Az Blazor alkalmazásban lévő ServerPrerendered alkalmazásokbanBlazor Server:
<body>
...
<persist-component-state />
</body>
Döntse el, hogy melyik állapotot kívánja megőrizni a PersistentComponentState szolgáltatással. A [PersistentState] tulajdonságra alkalmazott attribútum egy visszahívást regisztrál, amely megőrzi az állapotot az előrendelés során, és betölti azt, amikor az összetevő interaktívan renderel, vagy a szolgáltatás példányosítása történik.
Az alábbi példában a {TYPE} helyőrző a megőrzendő adatok típusát jelöli (például WeatherForecast[]).
@code {
[PersistentState]
public {TYPE} Data { get; set; }
protected override async Task OnInitializedAsync()
{
Data ??= await ...;
}
}
A következő példában az WeatherForecastPreserveState összetevő megőrzi az időjárás-előrejelzés állapotát az előzetes renderelés során, majd lekéri az állapotot az összetevő inicializálásához. A Komponensállapotot megőrző tag asszisztens az összes összetevő-meghívás után is megőrzi az összetevő állapotát.
WeatherForecastPreserveState.razor:
@page "/weather-forecast-preserve-state"
@using BlazorSample.Shared
@inject IWeatherForecastService WeatherForecastService
<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 {
[PersistentState]
public WeatherForecast[]? Forecasts { get; set; }
protected override async Task OnInitializedAsync()
{
Forecasts ??= await WeatherForecastService.GetForecastAsync(
DateOnly.FromDateTime(DateTime.Now));
}
}
Döntse el, hogy melyik állapotot kívánja megőrizni a PersistentComponentState szolgáltatással. PersistentComponentState.RegisterOnPersisting regisztrál egy visszahívást az összetevő állapotának megőrzéséhez az alkalmazás szüneteltetése előtt. A rendszer az alkalmazás folytatásakor kéri le az állapotot. Az inicializálási kód végén hajtsa végre a hívást, hogy elkerülje a lehetséges versenyhelyzetet az alkalmazás leállítása során.
Az alábbi példában:
- A
{TYPE}helyőrző a megőrizendő adatok típusát jelöli (példáulWeatherForecast[]). - A
{TOKEN}helyőrző egy állapotazonosító sztring (példáulfetchdata).
@implements IDisposable
@inject PersistentComponentState ApplicationState
...
@code {
private {TYPE} data;
private PersistingComponentStateSubscription persistingSubscription;
protected override async Task OnInitializedAsync()
{
if (!ApplicationState.TryTakeFromJson<{TYPE}>(
"{TOKEN}", out var restored))
{
data = await ...;
}
else
{
data = restored!;
}
// Call at the end to avoid a potential race condition at app shutdown
persistingSubscription = ApplicationState.RegisterOnPersisting(PersistData);
}
private Task PersistData()
{
ApplicationState.PersistAsJson("{TOKEN}", data);
return Task.CompletedTask;
}
void IDisposable.Dispose()
{
persistingSubscription.Dispose();
}
}
A következő példában az WeatherForecastPreserveState összetevő megőrzi az időjárás-előrejelzés állapotát az előzetes renderelés során, majd lekéri az állapotot az összetevő inicializálásához. A Komponensállapotot megőrző tag asszisztens az összes összetevő-meghívás után is megőrzi az összetevő állapotát.
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()
{
if (!ApplicationState.TryTakeFromJson<WeatherForecast[]>(
nameof(forecasts), out var restored))
{
forecasts =
await WeatherForecastService.GetForecastAsync(
DateOnly.FromDateTime(DateTime.Now));
}
else
{
forecasts = restored!;
}
// Call at the end to avoid a potential race condition at app shutdown
persistingSubscription = ApplicationState.RegisterOnPersisting(PersistData);
}
private Task PersistData()
{
ApplicationState.PersistAsJson(nameof(forecasts), forecasts);
return Task.CompletedTask;
}
void IDisposable.Dispose()
{
persistingSubscription.Dispose();
}
}
Az előrendelés során használt azonos állapotú összetevők inicializálásával a költséges inicializálási lépések csak egyszer lesznek végrehajtva. A renderelt felhasználói felület megegyezik az előre beállított felhasználói felülettel, így a böngészőben nem történik villódzás.
A rendszer átviszi a megőrzött előrerendelt állapotot az ügyfélnek, ahol az összetevő állapotának visszaállítására szolgál. ASP.NET Core Data Protection biztosítja az adatok biztonságos átvitelét az alkalmazásokban Blazor Server .
Előre beállított állapotméret és SignalR üzenetméretkorlát
A nagy előrerendelt állapotméret meghaladhatja BlazorSignalR kapcsolatcsoport üzenetméretkorlátját, ami a következőket eredményezi:
- A SignalR áramkör nem tud inicializálni egy hibával az ügyfélen: Circuit host not initialized.
- Az ügyfél újracsatlakozási felhasználói felülete akkor jelenik meg, ha a kapcsolatcsoport meghibásodik. A helyreállítás nem lehetséges.
A probléma megoldásához használja vagy a , vagy a alábbi módszerek egyikét:
- Csökkentse az előre beállított állapotba helyezendő adatok mennyiségét.
- Növelje az SignalR üzenet méretkorlátját. FIGYELMEZTETÉS: A korlát növelése növelheti a szolgáltatásmegtagadási (DoS-) támadások kockázatát.
További Blazor Server erőforrások
- Állapotkezelés: Védett böngészőtároló: Előrendelő kezelése
- Razor összetevők életciklusával kapcsolatos témák, amelyek az előzetes rendereléssel kapcsolatosak
- Hitelesítés és engedélyezés: Általános szempontok
- Hibák kezelése: Előrenderelés
- ASP.NET Core kiszolgálóoldali alkalmazások hosztolása és üzembe helyezése Blazor
- Fenyegetéscsökkentés: Helyek közötti szkriptelés (XSS)
-
OnNavigateAsync hajtja végre kétszer prerenderezéskor: Aszinkron navigációs események kezelése
OnNavigateAsync
Az előzetes rendezés javíthatja a keresőmotor-optimalizálást (SEO) azáltal, hogy megjeleníti a kezdeti HTTP-válasz tartalmát, amellyel a keresőmotorok kiszámíthatják az oldal rangját.
A projekt konfigurálása után a projekt követelményeitől függően kövesse az alábbi szakaszok útmutatását:
- Routable-összetevők: Olyan összetevők esetén, amelyek közvetlenül a felhasználói kérésekből irányíthatók. Kövesse ezt az útmutatást, ha a látogatóknak http-kérést kell küldeniük a böngészőjükben egy irányelvvel rendelkező
@pageösszetevőhöz. - Összetevők renderelése lapról vagy nézetből: Olyan összetevők esetén, amelyek nem közvetlenül a felhasználói kérésekből származnak. Kövesse ezt az útmutatást, ha az alkalmazás az összetevőket meglévő lapokba vagy nézetekbe ágyazza be a Komponenscímke súgójával.
Konfiguráció
Az alábbi útmutató segítségével a Razor összetevőket integrálhatja a meglévő Razor Pages vagy MVC alkalmazás lapjaiba vagy nézeteibe.
Fontos
A _Layout.cshtml komponensnél szükséges egy elrendezési oldal () és egy HeadOutlet használata a <head> tartalom szabályozásához, például a lap címének (PageTitle komponens) és egyéb fejelemeinek (HeadContent komponens) kezeléséhez. További információ: Vezérlőfej tartalma ASP.NET Core-alkalmazásokbanBlazor.
A projekt elrendezésfájljában:
Adja hozzá a következő
<base>címkét és a HeadOutlet összetevő tagsegítőt a<head>elemhezPages/Shared/_Layout.cshtml(Razor Oldalak) vagyViews/Shared/_Layout.cshtml(MVC) esetén.<base href="~/" /> <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />Az
hrefelőző példában szereplő érték (az alkalmazás alap elérési útja) feltételezi, hogy az alkalmazás a gyökér URL-cím elérési útján (/) található. Ha az alkalmazás egy alalkalmazás, tekintse meg ASP.NET Core-alkalmazás Blazor alap elérési útját.Az HeadOutlet összetevő a fej(
<head>) tartalom renderelésére szolgál, beleértve a lapcímeket (PageTitle összetevő) és az egyéb fejelemeket (HeadContent összetevő), amelyeket az Razor összetevők állítanak be. További információ: Vezérlőfej tartalma ASP.NET Core-alkalmazásokbanBlazor.Adjon hozzá egy címkét
<script>ablazor.server.jsszkripthez közvetlenül az alkalmazás elrendezésénekScriptsrenderelési szakasza (@await RenderSectionAsync(...)) előtt.Pages/Shared/_Layout.cshtml(Razor oldal) vagyViews/Shared/_Layout.cshtml(MVC):<script src="_framework/blazor.server.js"></script>A keretrendszer hozzáadja a
blazor.server.jsszkriptet az alkalmazáshoz. Nincs szükség szkriptfájl manuális hozzáadásárablazor.server.jsaz alkalmazáshoz.
Adjon hozzá egy importálási fájlt a projekt gyökérmappájába az alábbi tartalommal. Módosítsa a
{APP NAMESPACE}helyőrzőt a projekt névterére._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}Regisztrálja a Blazor Server szolgáltatásokat a
Program.cs-ben, ahol a szolgáltatások regisztrálva vannak.builder.Services.AddServerSideBlazor();Adja hozzá a Blazor hubvégpontot azon végpontokhoz
Program.cs, ahol az útvonalak le vannak képezve.Helyezze a következő sort a
MapRazorPages(Razor Pages) vagyMapControllerRoute(MVC) hívás után:app.MapBlazorHub();Összetevők integrálása bármely lapba vagy nézetbe. Adjon hozzá például egy összetevőt
Countera projekt mappájábaShared.Pages/Shared/Counter.razor(Razor oldal) vagyViews/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 Oldalak:
A Pages alkalmazás projektjének
Indexoldalán adja hozzá az Razor komponens névterét, és helyezze be az összetevőt az oldalba. Amikor azIndexoldal betöltődik, azCounterösszetevő előrerendelt lesz a lapon. Az alábbi példában cserélje le a{APP NAMESPACE}helyőrzőt a projekt névterére.Pages/Index.cshtml:@page @using {APP NAMESPACE}.Pages.Shared @model IndexModel @{ ViewData["Title"] = "Home page"; } <component type="typeof(Counter)" render-mode="ServerPrerendered" />MVC:
A projekt MVC alkalmazás nézetében adja hozzá az
Indexösszetevő névterét, és ágyazza be a nézetbe az összetevőt. Amikor aIndexnézet betöltődik, azCounterösszetevő előrerendelt lesz a lapon. Az alábbi példában cserélje le a{APP NAMESPACE}helyőrzőt a projekt névterére.Views/Home/Index.cshtml:@using {APP NAMESPACE}.Views.Shared @{ ViewData["Title"] = "Home Page"; } <component type="typeof(Counter)" render-mode="ServerPrerendered" />
További információkért lásd a Komponensek renderelése egy oldalról vagy nézetből szakaszt.
Routable-összetevők használata a Razor Pages-alkalmazásokban
Ez a szakasz olyan összetevők hozzáadására vonatkozik, amelyek közvetlenül a felhasználói kérésekből származnak.
A Pages-alkalmazásokban irányítható Razor összetevők támogatása:
Kövesse a Konfiguráció szakaszban található útmutatást.
Adjon hozzá egy összetevőt
Appa projekt gyökeréhez az alábbi tartalommal.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>Adjon hozzá egy
_Hostlapot a projekthez az alábbi tartalommal.Pages/_Host.cshtml:@page "/blazor" @namespace {APP NAMESPACE}.Pages.Shared @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @{ Layout = "_Layout"; } <component type="typeof(App)" render-mode="ServerPrerendered" />Ebben a forgatókönyvben az összetevők a megosztott
_Layout.cshtmlfájlt használják az elrendezésükhöz.Fontos
A
_Layout.cshtmlkomponensnél szükséges egy elrendezési oldal () és egy HeadOutlet használata a<head>tartalom szabályozásához, például a lap címének (PageTitle komponens) és egyéb fejelemeinek (HeadContent komponens) kezeléséhez. További információ: Vezérlőfej tartalma ASP.NET Core-alkalmazásokbanBlazor.RenderMode beállítja, hogy az
Appkomponens:- Előre le van renderelve az oldalra.
- Statikus HTML-ként jelenik meg a lapon, vagy ha tartalmazza a szükséges információkat az alkalmazás indításához a felhasználói ügynöktől Blazor.
Az összetevőcímke-segédről , beleértve a paraméterek és RenderMode a konfiguráció átadását is, a ASP.NET Core összetevőcímke-segédjében talál további információt.
Program.csA végpontokban adjon hozzá egy alacsony prioritású útvonalat az_Hostoldalhoz utolsó végpontként:app.MapFallbackToPage("/_Host");Routolható összetevők hozzáadása a projekthez. Az alábbi példa egy
RoutableCounterösszetevő, amely aCounterprojektsablonok Blazor összetevőjén alapul.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++; } }Futtassa a projektet, és navigáljon az irányítható
RoutableCounterösszetevőhöz/routable-counter.
A névterekről további információt az Összetevő névterek szakaszában talál.
Routable-összetevők használata MVC-alkalmazásokban
Ez a szakasz olyan összetevők hozzáadására vonatkozik, amelyek közvetlenül a felhasználói kérésekből származnak.
Az útvonalazható Razor összetevők támogatása az MVC-alkalmazásokban:
Kövesse a Konfiguráció szakaszban található útmutatást.
Adjon hozzá egy összetevőt
Appa projekt gyökeréhez az alábbi tartalommal.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>Adjon hozzá egy nézetet
_Hosta projekthez az alábbi tartalommal.Views/Home/_Host.cshtml:@namespace {APP NAMESPACE}.Views.Shared @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @{ Layout = "_Layout"; } <component type="typeof(App)" render-mode="ServerPrerendered" />Az összetevők a megosztott
_Layout.cshtmlfájlt használják az elrendezésükhöz.Fontos
A
_Layout.cshtmlkomponensnél szükséges egy elrendezési oldal () és egy HeadOutlet használata a<head>tartalom szabályozásához, például a lap címének (PageTitle komponens) és egyéb fejelemeinek (HeadContent komponens) kezeléséhez. További információ: Vezérlőfej tartalma ASP.NET Core-alkalmazásokbanBlazor.RenderMode beállítja, hogy az
Appkomponens:- Előre le van renderelve az oldalra.
- Statikus HTML-ként jelenik meg a lapon, vagy ha tartalmazza a szükséges információkat az alkalmazás indításához a felhasználói ügynöktől Blazor.
Az összetevőcímke-segédről , beleértve a paraméterek és RenderMode a konfiguráció átadását is, a ASP.NET Core összetevőcímke-segédjében talál további információt.
Adjon hozzá egy műveletet a Home vezérlőhöz.
Controllers/HomeController.cs:public IActionResult Blazor() { return View("_Host"); }Program.csA végpontokban adjon hozzá egy alacsony prioritású útvonalat a nézetet visszaadó_Hostvezérlőművelethez:app.MapFallbackToController("Blazor", "Home");Hozzon létre egy
Pagesmappát az MVC alkalmazásban, és adjon hozzá routable-összetevőket. Az alábbi példa egyRoutableCounterösszetevő, amely aCounterprojektsablonok Blazor összetevőjén alapul.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++; } }Futtassa a projektet, és navigáljon az irányítható
RoutableCounterösszetevőhöz/routable-counter.
A névterekről további információt az Összetevő névterek szakaszában talál.
Összetevők renderelése oldalról vagy nézetből
Ez a szakasz az összetevők lapokhoz vagy nézetekhez való hozzáadására vonatkozik, ahol az összetevők közvetlenül nem kezelhetők a felhasználói kérésekből.
Ha egy összetevőt egy oldalról vagy nézetből szeretne megjeleníteni, használja az Összetevőcímke segédet.
Állapotalapú interaktív összetevők renderelése
Az állapotalapú interaktív összetevők hozzáadhatók egy Razor laphoz vagy nézethez.
Amikor a lap vagy a nézet megjelenítésre kerül:
- Az összetevő előrenderelve van az oldallal vagy a nézettel.
- Az előrendezéshez használt kezdeti összetevőállapot elveszik.
- A kapcsolat létrejöttekor SignalR új összetevőállapot jön létre.
Az alábbi Razor oldal egy összetevőt Counter jelenít meg:
<h1>Razor Page</h1>
<component type="typeof(Counter)" render-mode="ServerPrerendered"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
További információért lásd: Összetevőcímke-segéd az ASP.NET Core-ban.
Fontos
A _Layout.cshtml komponensnél szükséges egy elrendezési oldal () és egy HeadOutlet használata a <head> tartalom szabályozásához, például a lap címének (PageTitle komponens) és egyéb fejelemeinek (HeadContent komponens) kezeléséhez. További információ: Vezérlőfej tartalma ASP.NET Core-alkalmazásokbanBlazor.
Neminteraktív összetevők renderelése
A következő Razor lapon az Counter összetevő statikusan jelenik meg egy űrlapon megadott kezdeti értékkel. Mivel az összetevő statikusan renderelt, az összetevő nem interaktív:
<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; }
}
További információért lásd: Összetevőcímke-segéd az ASP.NET Core-ban.
Fontos
A _Layout.cshtml komponensnél szükséges egy elrendezési oldal () és egy HeadOutlet használata a <head> tartalom szabályozásához, például a lap címének (PageTitle komponens) és egyéb fejelemeinek (HeadContent komponens) kezeléséhez. További információ: Vezérlőfej tartalma ASP.NET Core-alkalmazásokbanBlazor.
Összetevő névterei
Ha egyéni mappát használ a projekt Razor összetevőinek tárolására, adja hozzá a mappát jelképező névteret a laphoz/nézethez vagy a _ViewImports.cshtml fájlhoz. Az alábbi példában:
- Az összetevők a
Componentsprojekt mappájában vannak tárolva. - A
{APP NAMESPACE}helyőrző a projekt névtere.Componentsa mappa nevét jelöli.
@using {APP NAMESPACE}.Components
A _ViewImports.cshtml fájl a Pages mappában található egy Pages-alkalmazásban vagy a Razor mappában egy MVC-alkalmazásban.
További információ: ASP.NET Core Razor-összetevők.
Előre beállított állapot megőrzése
Az előre beállított állapot megőrzése nélkül az előrendelés során használt állapot elveszik, és újra létre kell hozni az alkalmazás teljes betöltésekor. Ha bármely állapot aszinkron módon van beállítva, a felhasználói felület villanhat, mivel az előre renderelt felhasználói felületet ideiglenesen helyőrző elemek váltják fel, majd újra teljesen renderelődik.
Ezeknek a problémáknak a megoldásához a Blazor támogatja az állapot megőrzését egy előre összeállított lapon, a Komponensállapot-tartó címke segítő használatával. Helyezze a Tag Helper címkét, <persist-component-state />, a záró </body> címkén belül.
Pages/_Layout.cshtml:
<body>
...
<persist-component-state />
</body>
Döntse el, hogy melyik állapotot kívánja megőrizni a PersistentComponentState szolgáltatással. PersistentComponentState.RegisterOnPersisting regisztrál egy visszahívást az összetevő állapotának megőrzéséhez az alkalmazás szüneteltetése előtt. A rendszer az alkalmazás folytatásakor kéri le az állapotot. Az inicializálási kód végén hajtsa végre a hívást, hogy elkerülje a lehetséges versenyhelyzetet az alkalmazás leállítása során.
A következő példában az WeatherForecastPreserveState összetevő megőrzi az időjárás-előrejelzés állapotát az előzetes renderelés során, majd lekéri az állapotot az összetevő inicializálásához. A Komponensállapotot megőrző tag asszisztens az összes összetevő-meghívás után is megőrzi az összetevő állapotát.
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()
{
if (!ApplicationState.TryTakeFromJson<WeatherForecast[]>(
nameof(forecasts), out var restored))
{
forecasts =
await WeatherForecastService.GetForecastAsync(DateTime.Now);
}
else
{
forecasts = restored!;
}
// Call at the end to avoid a potential race condition at app shutdown
persistingSubscription = ApplicationState.RegisterOnPersisting(PersistData);
}
private Task PersistData()
{
ApplicationState.PersistAsJson(nameof(forecasts), forecasts);
return Task.CompletedTask;
}
void IDisposable.Dispose()
{
persistingSubscription.Dispose();
}
}
Az előrendelés során használt azonos állapotú összetevők inicializálásával a költséges inicializálási lépések csak egyszer lesznek végrehajtva. A renderelt felhasználói felület megegyezik az előre beállított felhasználói felülettel, így a böngészőben nem történik villódzás.
A rendszer átviszi a megőrzött előrerendelt állapotot az ügyfélnek, ahol az összetevő állapotának visszaállítására szolgál. ASP.NET Core Data Protection biztosítja az adatok biztonságos átvitelét az alkalmazásokban Blazor Server .
Előre beállított állapotméret és SignalR üzenetméretkorlát
A nagy előrerendelt állapotméret meghaladhatja BlazorSignalR kapcsolatcsoport üzenetméretkorlátját, ami a következőket eredményezi:
- A SignalR áramkör nem tud inicializálni egy hibával az ügyfélen: Circuit host not initialized.
- Az ügyfél újracsatlakozási felhasználói felülete akkor jelenik meg, ha a kapcsolatcsoport meghibásodik. A helyreállítás nem lehetséges.
A probléma megoldásához használja vagy a , vagy a alábbi módszerek egyikét:
- Csökkentse az előre beállított állapotba helyezendő adatok mennyiségét.
- Növelje az SignalR üzenet méretkorlátját. FIGYELMEZTETÉS: A korlát növelése növelheti a szolgáltatásmegtagadási (DoS-) támadások kockázatát.
További Blazor Server erőforrások
- Állapotkezelés: Védett böngészőtároló: Előrendelő kezelése
- Razor összetevők életciklusával kapcsolatos témák, amelyek az előzetes rendereléssel kapcsolatosak
- Hitelesítés és engedélyezés: Általános szempontok
- Hibák kezelése: Előrenderelés
- ASP.NET Core kiszolgálóoldali alkalmazások hosztolása és üzembe helyezése Blazor
- Fenyegetéscsökkentés: Helyek közötti szkriptelés (XSS)
Az előzetes rendezés javíthatja a keresőmotor-optimalizálást (SEO) azáltal, hogy megjeleníti a kezdeti HTTP-válasz tartalmát, amellyel a keresőmotorok kiszámíthatják az oldal rangját.
A projekt konfigurálása után a projekt követelményeitől függően kövesse az alábbi szakaszok útmutatását:
- Routable-összetevők: Olyan összetevők esetén, amelyek közvetlenül a felhasználói kérésekből irányíthatók. Kövesse ezt az útmutatást, ha a látogatóknak http-kérést kell küldeniük a böngészőjükben egy irányelvvel rendelkező
@pageösszetevőhöz. - Összetevők renderelése lapról vagy nézetből: Olyan összetevők esetén, amelyek nem közvetlenül a felhasználói kérésekből származnak. Kövesse ezt az útmutatást, ha az alkalmazás az összetevőket meglévő lapokba vagy nézetekbe ágyazza be a Komponenscímke súgójával.
Konfiguráció
Egy meglévő Razor Lapok vagy MVC-alkalmazás képes összetevőket integrálni Razor lapokba vagy nézetekbe:
A projekt elrendezésfájljában:
Adja hozzá a következő
<base>címkét a<head>elemhezPages/Shared/_Layout.cshtml(Razor Pages) vagyViews/Shared/_Layout.cshtml(MVC):<base href="~/" />Az
hrefelőző példában szereplő érték (az alkalmazás alap elérési útja) feltételezi, hogy az alkalmazás a gyökér URL-cím elérési útján (/) található. Ha az alkalmazás egy alalkalmazás, tekintse meg ASP.NET Core-alkalmazás Blazor alap elérési útját.Adjon hozzá egy címkét
<script>a szkripthez közvetlenül ablazor.server.jsScriptsrenderelési szakasz előtt.Pages/Shared/_Layout.cshtml(Razor oldal) vagyViews/Shared/_Layout.cshtml(MVC):... <script src="_framework/blazor.server.js"></script> @await RenderSectionAsync("Scripts", required: false) </body>A keretrendszer hozzáadja a
blazor.server.jsszkriptet az alkalmazáshoz. Nincs szükség szkriptfájl manuális hozzáadásárablazor.server.jsaz alkalmazáshoz.
Adjon hozzá egy importálási fájlt a projekt gyökérmappájába az alábbi tartalommal. Módosítsa a
{APP NAMESPACE}helyőrzőt a projekt névterére._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}Regisztrálja a Blazor Server szolgáltatást a
Startup.ConfigureServices-ben.A
Startup.cs:services.AddServerSideBlazor();Adja hozzá a Blazor Hub végpontot a
app.UseEndpointsvégpontokhozStartup.Configure.Startup.cs:endpoints.MapBlazorHub();Összetevők integrálása bármely lapba vagy nézetbe. Adjon hozzá például egy összetevőt
Countera projekt mappájábaShared.Pages/Shared/Counter.razor(Razor oldal) vagyViews/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 Oldalak:
A Pages alkalmazás projektjének
Indexoldalán adja hozzá az Razor komponens névterét, és helyezze be az összetevőt az oldalba. Amikor azIndexoldal betöltődik, azCounterösszetevő előrerendelt lesz a lapon. Az alábbi példában cserélje le a{APP NAMESPACE}helyőrzőt a projekt névterére.Pages/Index.cshtml:@page @using {APP NAMESPACE}.Pages.Shared @model IndexModel @{ ViewData["Title"] = "Home page"; } <div> <component type="typeof(Counter)" render-mode="ServerPrerendered" /> </div>Az előző példában cserélje le a
{APP NAMESPACE}helyőrzőt az alkalmazás névterére.MVC:
A projekt MVC alkalmazás nézetében adja hozzá az
Indexösszetevő névterét, és ágyazza be a nézetbe az összetevőt. Amikor aIndexnézet betöltődik, azCounterösszetevő előrerendelt lesz a lapon. Az alábbi példában cserélje le a{APP NAMESPACE}helyőrzőt a projekt névterére.Views/Home/Index.cshtml:@using {APP NAMESPACE}.Views.Shared @{ ViewData["Title"] = "Home Page"; } <div> <component type="typeof(Counter)" render-mode="ServerPrerendered" /> </div>
További információkért lásd a Komponensek renderelése egy oldalról vagy nézetből szakaszt.
Routable-összetevők használata a Razor Pages-alkalmazásokban
Ez a szakasz olyan összetevők hozzáadására vonatkozik, amelyek közvetlenül a felhasználói kérésekből származnak.
A Pages-alkalmazásokban irányítható Razor összetevők támogatása:
Kövesse a Konfiguráció szakaszban található útmutatást.
Adjon hozzá egy összetevőt
Appa projekt gyökeréhez az alábbi tartalommal.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>Megjegyzés
A .NET 5.0.1 kiadásával és minden további 5.x kiadás esetén az
Routerösszetevő tartalmazza aPreferExactMatcheskövetkező paramétert@true: . További információ: Migrálás ASP.NET Core 3.1-ről .NET 5-be.Adjon hozzá egy
_Hostlapot a projekthez az alábbi tartalommal.Pages/_Host.cshtml:@page "/blazor" @{ Layout = "_Layout"; } <app> <component type="typeof(App)" render-mode="ServerPrerendered" /> </app>Az összetevők a megosztott
_Layout.cshtmlfájlt használják az elrendezésükhöz.RenderMode beállítja, hogy az
Appkomponens:- Előre le van renderelve az oldalra.
- Statikus HTML-ként jelenik meg a lapon, vagy ha tartalmazza a szükséges információkat az alkalmazás indításához a felhasználói ügynöktől Blazor.
Az összetevőcímke-segédről , beleértve a paraméterek és RenderMode a konfiguráció átadását is, a ASP.NET Core összetevőcímke-segédjében talál további információt.
Startup.ConfigureA végpontokbanStartup.csadjon hozzá egy alacsony prioritású útvonalat az_Hostoldalhoz utolsó végpontként:endpoints.MapFallbackToPage("/_Host");Az alábbi példa egy tipikus alkalmazás végpontkonfigurációjának hozzáadott sorát mutatja be:
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); });Routolható összetevők hozzáadása a projekthez.
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++; } }Futtassa a projektet, és navigáljon az irányítható
RoutableCounterösszetevőhöz/routable-counter.
A névterekről további információt az Összetevő névterek szakaszában talál.
Routable-összetevők használata MVC-alkalmazásokban
Ez a szakasz olyan összetevők hozzáadására vonatkozik, amelyek közvetlenül a felhasználói kérésekből származnak.
Az útvonalazható Razor összetevők támogatása az MVC-alkalmazásokban:
Kövesse a Konfiguráció szakaszban található útmutatást.
Adjon hozzá egy összetevőt
Appa projekt gyökeréhez az alábbi tartalommal.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>Megjegyzés
A .NET 5.0.1 kiadásával és minden további 5.x kiadás esetén az
Routerösszetevő tartalmazza aPreferExactMatcheskövetkező paramétert@true: . További információ: Migrálás ASP.NET Core 3.1-ről .NET 5-be.Adjon hozzá egy nézetet
_Hosta projekthez az alábbi tartalommal.Views/Home/_Host.cshtml:@{ Layout = "_Layout"; } <app> <component type="typeof(App)" render-mode="ServerPrerendered" /> </app>Az összetevők a megosztott
_Layout.cshtmlfájlt használják az elrendezésükhöz.RenderMode beállítja, hogy az
Appkomponens:- Előre le van renderelve az oldalra.
- Statikus HTML-ként jelenik meg a lapon, vagy ha tartalmazza a szükséges információkat az alkalmazás indításához a felhasználói ügynöktől Blazor.
Az összetevőcímke-segédről , beleértve a paraméterek és RenderMode a konfiguráció átadását is, a ASP.NET Core összetevőcímke-segédjében talál további információt.
Adjon hozzá egy műveletet a Home vezérlőhöz.
Controllers/HomeController.cs:public IActionResult Blazor() { return View("_Host"); }Startup.ConfigureA végpontokbanStartup.csadjon hozzá egy alacsony prioritású útvonalat a nézetet visszaadó_Hostvezérlőművelethez:endpoints.MapFallbackToController("Blazor", "Home");Az alábbi példa egy tipikus alkalmazás végpontkonfigurációjának hozzáadott sorát mutatja be:
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapBlazorHub(); endpoints.MapFallbackToController("Blazor", "Home"); });Routolható összetevők hozzáadása a projekthez.
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++; } }Futtassa a projektet, és navigáljon az irányítható
RoutableCounterösszetevőhöz/routable-counter.
A névterekről további információt az Összetevő névterek szakaszában talál.
Összetevők renderelése oldalról vagy nézetből
Ez a szakasz az összetevők lapokhoz vagy nézetekhez való hozzáadására vonatkozik, ahol az összetevők közvetlenül nem kezelhetők a felhasználói kérésekből.
Ha egy összetevőt egy oldalról vagy nézetből szeretne megjeleníteni, használja az Összetevőcímke segédet.
Állapotalapú interaktív összetevők renderelése
Az állapotalapú interaktív összetevők hozzáadhatók egy Razor laphoz vagy nézethez.
Amikor a lap vagy a nézet megjelenítésre kerül:
- Az összetevő előrenderelve van az oldallal vagy a nézettel.
- Az előrendezéshez használt kezdeti összetevőállapot elveszik.
- A kapcsolat létrejöttekor SignalR új összetevőállapot jön létre.
Az alábbi Razor oldal egy összetevőt Counter jelenít meg:
<h1>My Razor Page</h1>
<component type="typeof(Counter)" render-mode="ServerPrerendered"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
További információért lásd: Összetevőcímke-segéd az ASP.NET Core-ban.
Neminteraktív összetevők renderelése
A következő Razor lapon az Counter összetevő statikusan jelenik meg egy űrlapon megadott kezdeti értékkel. Mivel az összetevő statikusan renderelt, az összetevő nem interaktív:
<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; }
}
További információért lásd: Összetevőcímke-segéd az ASP.NET Core-ban.
Összetevő névterei
Ha egyéni mappát használ a projekt Razor összetevőinek tárolására, adja hozzá a mappát jelképező névteret a laphoz/nézethez vagy a _ViewImports.cshtml fájlhoz. Az alábbi példában:
- Az összetevők a
Componentsprojekt mappájában vannak tárolva. - A
{APP NAMESPACE}helyőrző a projekt névtere.Componentsa mappa nevét jelöli.
@using {APP NAMESPACE}.Components
A _ViewImports.cshtml fájl a Pages mappában található egy Pages-alkalmazásban vagy a Razor mappában egy MVC-alkalmazásban.
További információ: ASP.NET Core Razor-összetevők.
Előre beállított állapotméret és SignalR üzenetméretkorlát
A nagy előrerendelt állapotméret meghaladhatja BlazorSignalR kapcsolatcsoport üzenetméretkorlátját, ami a következőket eredményezi:
- A SignalR áramkör nem tud inicializálni egy hibával az ügyfélen: Circuit host not initialized.
- Az ügyfél újracsatlakozási felhasználói felülete akkor jelenik meg, ha a kapcsolatcsoport meghibásodik. A helyreállítás nem lehetséges.
A probléma megoldásához használja vagy a , vagy a alábbi módszerek egyikét:
- Csökkentse az előre beállított állapotba helyezendő adatok mennyiségét.
- Növelje az SignalR üzenet méretkorlátját. FIGYELMEZTETÉS: A korlát növelése növelheti a szolgáltatásmegtagadási (DoS-) támadások kockázatát.
További Blazor Server erőforrások
- Állapotkezelés: Védett böngészőtároló: Előrendelő kezelése
- Razor összetevők életciklusával kapcsolatos témák, amelyek az előzetes rendereléssel kapcsolatosak
- Hitelesítés és engedélyezés: Általános szempontok
- Hibák kezelése: Előrenderelés
- ASP.NET Core kiszolgálóoldali alkalmazások hosztolása és üzembe helyezése Blazor
- Fenyegetéscsökkentés: Helyek közötti szkriptelés (XSS)
Razor összetevők integrálhatók a Pages vagy az MVC alkalmazásokba Razor . Az oldal vagy nézet megjelenítésekor az összetevők egyszerre előrerendelhetők.
Az előzetes rendezés javíthatja a keresőmotor-optimalizálást (SEO) azáltal, hogy megjeleníti a kezdeti HTTP-válasz tartalmát, amellyel a keresőmotorok kiszámíthatják az oldal rangját.
A projekt konfigurálása után a projekt követelményeitől függően kövesse az alábbi szakaszok útmutatását:
- Routable-összetevők: Olyan összetevők esetén, amelyek közvetlenül a felhasználói kérésekből irányíthatók. Kövesse ezt az útmutatást, ha a látogatóknak http-kérést kell küldeniük a böngészőjükben egy irányelvvel rendelkező
@pageösszetevőhöz. - Összetevők renderelése lapról vagy nézetből: Olyan összetevők esetén, amelyek nem közvetlenül a felhasználói kérésekből származnak. Kövesse ezt az útmutatást, ha az alkalmazás az összetevőket meglévő lapokba vagy nézetekbe ágyazza be a Komponenscímke súgójával.
Konfiguráció
Egy meglévő Razor Lapok vagy MVC-alkalmazás képes összetevőket integrálni Razor lapokba vagy nézetekbe:
A projekt elrendezésfájljában:
Adja hozzá a következő
<base>címkét a<head>elemhezPages/Shared/_Layout.cshtml(Razor Pages) vagyViews/Shared/_Layout.cshtml(MVC):+ <base href="~/" />Az
hrefelőző példában szereplő érték (az alkalmazás alap elérési útja) feltételezi, hogy az alkalmazás a gyökér URL-cím elérési útján (/) található. Ha az alkalmazás egy alalkalmazás, tekintse meg ASP.NET Core-alkalmazás Blazor alap elérési útját.Adjon hozzá egy címkét
<script>a szkripthez közvetlenül ablazor.server.jsScriptsrenderelési szakasz előtt.Pages/Shared/_Layout.cshtml(Razor oldal) vagyViews/Shared/_Layout.cshtml(MVC):... <script src="_framework/blazor.server.js"></script> @await RenderSectionAsync("Scripts", required: false) </body>A keretrendszer hozzáadja a
blazor.server.jsszkriptet az alkalmazáshoz. Nincs szükség szkriptfájl manuális hozzáadásárablazor.server.jsaz alkalmazáshoz.
Adjon hozzá egy importálási fájlt a projekt gyökérmappájába az alábbi tartalommal. Módosítsa a
{APP NAMESPACE}helyőrzőt a projekt névterére._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}Regisztrálja a Blazor Server szolgáltatást a
Startup.ConfigureServices-ben.Startup.cs:services.AddServerSideBlazor();Adja hozzá a Blazor Hub végpontot a
app.UseEndpointsvégpontokhozStartup.Configure.Startup.cs:endpoints.MapBlazorHub();Összetevők integrálása bármely lapba vagy nézetbe. Adjon hozzá például egy összetevőt
Countera projekt mappájábaShared.Pages/Shared/Counter.razor(Razor oldal) vagyViews/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 Oldalak:
A Pages alkalmazás projektjének
Indexoldalán adja hozzá az Razor komponens névterét, és helyezze be az összetevőt az oldalba. Amikor azIndexoldal betöltődik, azCounterösszetevő előrerendelt lesz a lapon. Az alábbi példában cserélje le a{APP NAMESPACE}helyőrzőt a projekt névterére.Pages/Index.cshtml:@page @using {APP NAMESPACE}.Pages.Shared @model IndexModel @{ ViewData["Title"] = "Home page"; } <div> <component type="typeof(Counter)" render-mode="ServerPrerendered" /> </div>Az előző példában cserélje le a
{APP NAMESPACE}helyőrzőt az alkalmazás névterére.MVC:
A projekt MVC alkalmazás nézetében adja hozzá az
Indexösszetevő névterét, és ágyazza be a nézetbe az összetevőt. Amikor aIndexnézet betöltődik, azCounterösszetevő előrerendelt lesz a lapon. Az alábbi példában cserélje le a{APP NAMESPACE}helyőrzőt a projekt névterére.Views/Home/Index.cshtml:@using {APP NAMESPACE}.Views.Shared @{ ViewData["Title"] = "Home Page"; } <div> <component type="typeof(Counter)" render-mode="ServerPrerendered" /> </div>
További információkért lásd a Komponensek renderelése egy oldalról vagy nézetből szakaszt.
Routable-összetevők használata a Razor Pages-alkalmazásokban
Ez a szakasz olyan összetevők hozzáadására vonatkozik, amelyek közvetlenül a felhasználói kérésekből származnak.
A Pages-alkalmazásokban irányítható Razor összetevők támogatása:
Kövesse a Konfiguráció szakaszban található útmutatást.
Adjon hozzá egy összetevőt
Appa projekt gyökeréhez az alábbi tartalommal.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>Adjon hozzá egy
_Hostlapot a projekthez az alábbi tartalommal.Pages/_Host.cshtml:@page "/blazor" @{ Layout = "_Layout"; } <app> <component type="typeof(App)" render-mode="ServerPrerendered" /> </app>Az összetevők a megosztott
_Layout.cshtmlfájlt használják az elrendezésükhöz.RenderMode beállítja, hogy az
Appkomponens:- Előre le van renderelve az oldalra.
- Statikus HTML-ként jelenik meg a lapon, vagy ha tartalmazza a szükséges információkat az alkalmazás indításához a felhasználói ügynöktől Blazor.
Az összetevőcímke-segédről , beleértve a paraméterek és RenderMode a konfiguráció átadását is, a ASP.NET Core összetevőcímke-segédjében talál további információt.
Startup.ConfigureA végpontokbanStartup.csadjon hozzá egy alacsony prioritású útvonalat az_Hostoldalhoz utolsó végpontként:endpoints.MapFallbackToPage("/_Host");Az alábbi példa egy tipikus alkalmazás végpontkonfigurációjának hozzáadott sorát mutatja be:
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); });Routolható összetevők hozzáadása a projekthez.
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++; } }Futtassa a projektet, és navigáljon az irányítható
RoutableCounterösszetevőhöz/routable-counter.
A névterekről további információt az Összetevő névterek szakaszában talál.
Routable-összetevők használata MVC-alkalmazásokban
Ez a szakasz olyan összetevők hozzáadására vonatkozik, amelyek közvetlenül a felhasználói kérésekből származnak.
Az útvonalazható Razor összetevők támogatása az MVC-alkalmazásokban:
Kövesse a Konfiguráció szakaszban található útmutatást.
Adjon hozzá egy összetevőt
Appa projekt gyökeréhez az alábbi tartalommal.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>Adjon hozzá egy nézetet
_Hosta projekthez az alábbi tartalommal.Views/Home/_Host.cshtml:@{ Layout = "_Layout"; } <app> <component type="typeof(App)" render-mode="ServerPrerendered" /> </app>Az összetevők a megosztott
_Layout.cshtmlfájlt használják az elrendezésükhöz.RenderMode beállítja, hogy az
Appkomponens:- Előre le van renderelve az oldalra.
- Statikus HTML-ként jelenik meg a lapon, vagy ha tartalmazza a szükséges információkat az alkalmazás indításához a felhasználói ügynöktől Blazor.
Az összetevőcímke-segédről , beleértve a paraméterek és RenderMode a konfiguráció átadását is, a ASP.NET Core összetevőcímke-segédjében talál további információt.
Adjon hozzá egy műveletet a Home vezérlőhöz.
Controllers/HomeController.cs:public IActionResult Blazor() { return View("_Host"); }Startup.ConfigureA végpontokbanStartup.csadjon hozzá egy alacsony prioritású útvonalat a nézetet visszaadó_Hostvezérlőművelethez:endpoints.MapFallbackToController("Blazor", "Home");Az alábbi példa egy tipikus alkalmazás végpontkonfigurációjának hozzáadott sorát mutatja be:
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapBlazorHub(); endpoints.MapFallbackToController("Blazor", "Home"); });Routolható összetevők hozzáadása a projekthez.
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++; } }Futtassa a projektet, és navigáljon az irányítható
RoutableCounterösszetevőhöz/routable-counter.
A névterekről további információt az Összetevő névterek szakaszában talál.
Összetevők renderelése oldalról vagy nézetből
Ez a szakasz az összetevők lapokhoz vagy nézetekhez való hozzáadására vonatkozik, ahol az összetevők közvetlenül nem kezelhetők a felhasználói kérésekből.
Ha egy összetevőt egy oldalról vagy nézetből szeretne megjeleníteni, használja az Összetevőcímke segédet.
Állapotalapú interaktív összetevők renderelése
Az állapotalapú interaktív összetevők hozzáadhatók egy Razor laphoz vagy nézethez.
Amikor a lap vagy a nézet megjelenítésre kerül:
- Az összetevő előrenderelve van az oldallal vagy a nézettel.
- Az előrendezéshez használt kezdeti összetevőállapot elveszik.
- A kapcsolat létrejöttekor SignalR új összetevőállapot jön létre.
Az alábbi Razor oldal egy összetevőt Counter jelenít meg:
<h1>My Razor Page</h1>
<component type="typeof(Counter)" render-mode="ServerPrerendered"
param-InitialValue="InitialValue" />
@functions {
[BindProperty(SupportsGet=true)]
public int InitialValue { get; set; }
}
További információért lásd: Összetevőcímke-segéd az ASP.NET Core-ban.
Neminteraktív összetevők renderelése
A következő Razor lapon az Counter összetevő statikusan jelenik meg egy űrlapon megadott kezdeti értékkel. Mivel az összetevő statikusan renderelt, az összetevő nem interaktív:
<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; }
}
További információért lásd: Összetevőcímke-segéd az ASP.NET Core-ban.
Összetevő névterei
Ha egyéni mappát használ a projekt Razor összetevőinek tárolására, adja hozzá a mappát jelképező névteret a laphoz/nézethez vagy a _ViewImports.cshtml fájlhoz. Az alábbi példában:
- Az összetevők a
Componentsprojekt mappájában vannak tárolva. - A
{APP NAMESPACE}helyőrző a projekt névtere.Componentsa mappa nevét jelöli.
@using {APP NAMESPACE}.Components
A _ViewImports.cshtml fájl a Pages mappában található egy Pages-alkalmazásban vagy a Razor mappában egy MVC-alkalmazásban.
További információ: ASP.NET Core Razor-összetevők.
Előre beállított állapotméret és SignalR üzenetméretkorlát
A nagy előrerendelt állapotméret meghaladhatja BlazorSignalR kapcsolatcsoport üzenetméretkorlátját, ami a következőket eredményezi:
- A SignalR áramkör nem tud inicializálni egy hibával az ügyfélen: Circuit host not initialized.
- Az ügyfél újracsatlakozási felhasználói felülete akkor jelenik meg, ha a kapcsolatcsoport meghibásodik. A helyreállítás nem lehetséges.
A probléma megoldásához használja vagy a , vagy a alábbi módszerek egyikét:
- Csökkentse az előre beállított állapotba helyezendő adatok mennyiségét.
- Növelje az SignalR üzenet méretkorlátját. FIGYELMEZTETÉS: A korlát növelése növelheti a szolgáltatásmegtagadási (DoS-) támadások kockázatát.
További Blazor Server erőforrások
- Állapotkezelés: Védett böngészőtároló: Előrendelő kezelése
- Razor összetevők életciklusával kapcsolatos témák, amelyek az előzetes rendereléssel kapcsolatosak
- Hitelesítés és engedélyezés: Általános szempontok
- Hibák kezelése: Előrenderelés
- ASP.NET Core kiszolgálóoldali alkalmazások hosztolása és üzembe helyezése Blazor
- Fenyegetéscsökkentés: Helyek közötti szkriptelés (XSS)