このレクチャーでは、標準テンプレートに含まれるCounterページ(Counter.razor)を教材として、Razorコンポーネントの書き方=Razor構文について解説します。ボタンを押すと画面が更新されるだけのシンプルな画面ですが、ボタンの配置やラベルの更新方法など要素が詰まっており、Razor構文を理解する上で良いサンプルになっています。
図1 Counterページ(ボタンを押すと Current count の値が更新される)
Razor構文とは
Razor構文とは、前回説明した通り、Razorコンポーネントに書いていく文法のことです。まずはCounter.razorのコード全体を見てみましょう。
図2 Counter.razor の全体コード
Counter.razorのソースコードは次の通りです。
@page "/counter"
@rendermode InteractiveServer
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
「@」があるかないかで意味合いが変わる
このRazor構文には特徴があります。それは「@」があるかないかで意味合いが変わってくるという点です。「@」マークが付いている部分は、基本的にRazor構文と言われる部分になっています。
図3 @rendermode のように「@」が付いている部分がRazor構文
Razor構文では、@rendermode のように何かを宣言することができたり、@currentCount のようにデータバインドができたり、@onclick=”IncrementCount” のように純粋なC#コードを埋め込んだりすることができます。ほかにも、foreach を書いたり if 文を書いたりすることも可能です。以下はWeather.razorで使われている@ifと@foreachの例です。
図4 Weather.razor に見る @if / @foreach の例
@code エリア
また、「@code」というエリアがあります。@codeという部分は、その中に本当に純粋なC#コードが書けるというエリアになっています。Counter.razorでは、フィールドcurrentCountの宣言と、IncrementCountメソッドの実装がこの@codeブロックの中に書かれています。
図5 @code { … } で囲まれた部分は純粋なC#コードのエリア
「@」がない部分=基本的には純粋なHTML
一方で、「@」がない部分は、基本的には純粋なHTMLになっています。Counter.razorで言えば、<h1>Counter</h1> のような部分がこれにあたります。
ただし例外があります。緑の太文字になっている部分です。これはRazorコンポーネントと呼ばれるもので、Razorコンポーネントはページを作るだけでなく、部品(WindowsFormsで言うユーザーコントロールのようなもの)も作ることができます。他のRazorコンポーネントを使う場合や、Microsoftが作って提供してくれているRazorコンポーネントを使う場合は、このように緑の太文字で表示されます。
図6 PageTitleにカーソルを合わせると Microsoft.AspNetCore.Components.Web.PageTitle であることが分かる(=Microsoft提供のRazorコンポーネント)
このPageTitleタグは、HTMLの<title>タグをHeadOutletコンポーネントにレンダリングするためのMicrosoft提供のRazorコンポーネントです。自作・他作を問わずRazorコンポーネントであるため「@」は付きませんが、純粋なHTMLタグとは区別されて緑の太文字で表示される、という仕組みです。
まとめ
Razor構文の大きな特徴は、「@」の有無で意味合いが変わってくるという点です。まとめると次のようになります。
・「@」が付いている部分…変数宣言、データバインド、C#コードの埋め込み、if文やforeachなどのRazor構文
・「@code { }」の中…純粋なC#コードを書けるエリア
・「@」が付いていない部分…基本的には純粋なHTML(ただし緑の太文字はRazorコンポーネントで、自作コンポーネントやMicrosoft提供コンポーネントを表す)
HTMLに、純粋なC#コードを@codeで書き、それ以外にも@が付いたRazor構文がポロポロと出てくる、というのがRazor構文の大きな特徴です。次回以降のレクチャーでは、このCounter.razorを見ながら、それぞれの要素をさらに詳しく解説していきます。
A01_はじめに
A02_バージョンの確認
A03_プロジェクトの作成
A04_アプリの実行
A05_サンプルプログラムの構成
A06_Razorコンポーネント
A07_Razor構文
A08_@pageでURLを指定する
A09_@rendermode
A10_PageTitle
A11_HTMLの見出し
A12_pタグ
A13_単方向データバインド
A14_単方向データバインドの詳細
A15_Bootstrap
A16_ボタンクリックイベント
A17_イベント引数の受け取り方
A18_ここまでのまとめ
B01_新しいWebページを追加する方法
B02_サイドバーから画面を表示する
B03_サイドバーのアイコンを変更する方法
B04_計測値を表示する
B05_変数に置き換える
B06_最新の値でデータを更新する
B07_@usingで通常のC#コードを呼び出す
B08_画面遷移_aタグ
B09_画面遷移_aタグの見た目をボタンにする
B10_画面遷移_NavigationManagerでの遷移
B11_画面間のパラメータの受け渡し方法
B12_EscapeDataStringでエスケープする
B13_複数のパラメータを渡す
B14_任意のパラメータにする
B15_string以外の型をパラメータで使う方法
B16_DateTime型をパラメータで渡す方法
B17_引数2個のURLも型指定に変更する
B18_パラメータ属性をつけるときの注意点
B19_OnParametersSet
B20_OnInitialized
B21_OnInitializedが2回通る問題の対応
B22_ブラウザが開いている間の値を記憶する方法
B23_値の受け渡しとしてのProtectedSessionStorage
B24_非同期を想定したUIの制御
C01_一覧表示
C02_非同期での一覧表示
C03_table-striped
D01_入力エリア
D02_双方向データバインド
D03_入力データをリアルタイムで通知する方法
D04_placeholder
D05_入力エリアの横幅の調整
D06_テキストチェンジイベントを拾う方法
D07_プルダウン
D08_プルダウンのbootstrap
D09_プルダウンの選択している値をデータバインドで操作する
D10_プルダウンにリストの値を表示する
D11_プルダウンに未選択行を入れる
D12_プルダウンの入力を禁止する
D13_プルダウンのチェンジイベントを取得する
D14_チェックボックス
D15_チェックボックスにラベルを付ける
D16_複数のチェックボックスを並べる
D17_ラジオボタン
D18_ラジオボタンのデータバインド
D19_ラジオボタンのチェンジイベント
D20_ラジオボタンにbootstrapを適応する