pageディレクティブとは?Blazorでのルーティングの基本|ASP.NET×Blazor入門 5.1

5.1 @pageディレクティブの意味

Blazorのコンポーネントには、@page という特別なディレクティブを使ってURLとの紐づけを行うことができます。 一見すると単なる“ルーティング用のマーク”のように見えますが、実はこの一行こそが、Blazorにとっての「画面」の定義そのものなのです。

たとえば、以下のようなコードを見てみましょう。

@page "/hello"

<h3>Hello, Blazor!</h3>

このコンポーネントは、アプリのURLが /hello だったときに表示される画面を定義しています。 言い換えると、URL = コンポーネントという構造がBlazorのルーティングの基本ルールです。

URLとのマッピングの仕組み

Blazorはアプリの起動時に、すべての@pageディレクティブをスキャンしてURLパターンを収集します。 その後、実際のURLと照合して、最も一致するパターンを持つコンポーネントを表示します。

ここで重要なのは、URLの解釈は正確に文字列マッチで行われるということ。 @page "/hello" という定義がある場合、/Hello/hello/ などは別物として扱われます。

複数の@pageを持たせることも可能

実は1つのコンポーネントに複数の@pageディレクティブを持たせることもできます。 たとえばこんな書き方も可能です。

@page "/hello"
@page "/greetings"

<h3>こんにちは!</h3>

この場合、/hello/greetingsのどちらにアクセスしても、同じコンポーネントが表示されます。 リダイレクトを行うほどでもない軽微な別名を扱いたい場合などに便利です。

コンポーネント = ページではない

@pageを付けることでそのコンポーネントが「ページ」として振る舞うようになりますが、 逆に言えば@pageが付いていない限り、そのコンポーネントは画面遷移の対象にはなりません。

つまり、Blazorでは画面としてアクセスできるコンポーネントと、再利用されるUI部品としてのコンポーネントが、 @pageの有無で明確に区別されているのです。

次のセクションでは、このルーティングの仕組みに「パラメータ」を加えて、より柔軟な画面定義を行う方法について見ていきましょう。 → 5.2 パラメータ付きルーティング

2025-04-21

下田 昌平

開発に関するインプットをアウトプットしています。