Razor Pages に Blazor Server を機能させる

投稿者: | 2022年12月4日

RazorPagesにBlazor Serverが使えるようにした備忘録。詳しい説明は後述の参考文献のリンクを読んでください。

既存コードの修正

Program.cs修正

    :
builder.Services.AddServerSideBlazor();
    :
app.UseEndpoints(endpoints =>
{
    //endpoints.MapControllers();
    //endpoints.MapRazorPages();
    endpoints.MapBlazorHub();
    endpoints.MapFallbackToPage("/_Host"); // RazorPageにBlazorを部分的に使うだけなら必要ない
});

_Layout.cs修正

     :
<script src="~/_framework/blazor.server.js"></script>
     :

Pagesフォルダに追加

3つのファイルを追加

_Imports.razor追加

@using System.Net.Http
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.JSInterop
@using Microsoft.AspNetCore.Components.Web

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.cshtml

@page "/blazor"

@{
    Layout = "_Layout";
}

<app>
    <base href="~/" />
    @(await Html.RenderComponentAsync<App>(RenderMode.Server))
</app>

サンプルコード

@page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    int currentCount = 0;

    void IncrementCount()
    {
        currentCount++;
    }
}

上記をRazorPage内の部分ビューとして表示させたい場合は.cshtmlファイルに下記コードを埋め込んでください。

<component>@(await Html.RenderComponentAsync<Counter>(RenderMode.Server))</component>

参考文献

Combining Razor and Blazor Pages in a Single ASP.NET Core 3 Application

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)