Vykreslení Razor komponent mimo ASP.NET Core
Razor komponenty lze vykreslit mimo kontext požadavku HTTP. Komponenty můžete vykreslit Razor přímo do řetězce nebo streamu nezávisle na hostitelském prostředí ASP.NET Core. To je vhodné pro scénáře, ve kterých chcete generovat fragmenty HTML, jako je generování e-mailového obsahu, generování statického obsahu webu nebo vytvoření modulu šablon obsahu.
V následujícím příkladu se komponenta Razor vykreslí do řetězce HTML z konzolové aplikace:
V příkazovém prostředí vytvořte nový projekt konzolové aplikace:
dotnet new console -o ConsoleApp1
cd ConsoleApp1
V příkazovém prostředí ve ConsoleApp1
složce přidejte odkazy na balíčky a Microsoft.AspNetCore.Components.WebMicrosoft.Extensions.Logging do konzolové aplikace:
dotnet add package Microsoft.AspNetCore.Components.Web
dotnet add package Microsoft.Extensions.Logging
V souboru projektu konzolové aplikace (ConsoleApp1.csproj
) aktualizujte projekt konzolové aplikace tak, aby používal sadu Razor SDK:
- <Project Sdk="Microsoft.NET.Sdk">
+ <Project Sdk="Microsoft.NET.Sdk.Razor">
Přidejte do projektu následující RenderMessage
komponentu.
RenderMessage.razor
:
<h1>Render Message</h1>
<p>@Message</p>
@code {
[Parameter]
public string Message { get; set; }
}
Aktualizujte Program
soubor:
- Nastavení injektáže závislostí (IServiceCollection/BuildServiceProvider) a protokolování ().AddLogging/ILoggerFactory
- Vytvoření a vykreslení HtmlRenderer
RenderMessage
komponenty voláním RenderComponentAsync.
Všechna volání musí RenderComponentAsync být provedena v kontextu volání InvokeAsync
na dispečer součásti. Dispečer komponenty je k dispozici ve HtmlRenderer.Dispatcher vlastnosti.
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using ConsoleApp1;
IServiceCollection services = new ServiceCollection();
services.AddLogging();
IServiceProvider serviceProvider = services.BuildServiceProvider();
ILoggerFactory loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
await using var htmlRenderer = new HtmlRenderer(serviceProvider, loggerFactory);
var html = await htmlRenderer.Dispatcher.InvokeAsync(async () =>
{
var dictionary = new Dictionary<string, object?>
{
{ "Message", "Hello from the Render Message component!" }
};
var parameters = ParameterView.FromDictionary(dictionary);
var output = await htmlRenderer.RenderComponentAsync<RenderMessage>(parameters);
return output.ToHtmlString();
});
Console.WriteLine(html);
Poznámka:
RenderComponentAsync Předejte ParameterView.Empty při vykreslování komponenty bez předání parametrů.
Alternativně můžete kód HTML napsat voláním TextWriteroutput.WriteHtmlTo(textWriter)
.
Úloha vrácená dokončením RenderComponentAsync po úplném vykreslení komponenty, včetně dokončení všech asynchronních metod životního cyklu. Pokud chcete vidět vykreslený kód HTML dříve, volejte BeginRenderingComponent místo toho. Potom počkejte, až se vykreslování komponenty dokončí, a to čekáním HtmlRootComponent.QuiescenceTask na vrácenou HtmlRootComponent instanci.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro