Blazor01

BlazorでのWebアプリケーション開発手法1【C#】D13_プルダウンのチェンジイベントを取得する

今回は、プルダウン(select要素)のチェンジイベントを取得する方法を解説します。やり方は、以前の入力欄(input要素)のイベント取得のときと同じで、@bind:after を使って値が変わった後に呼ばれるメソッドを紐付けます。

イベントハンドラーメソッドを作成する

まず、商品のプルダウンが変わったときに呼ばれるメソッドを用意しておきます。private void で ProductChanged という名前のメソッドを新規作成します。

図1 MeasureSettingPage.razor の @code ブロック。プライベートフィールドと OnInitialized の内容を確認しているところ

図2 Save() メソッドの下に、新しいメソッドを追加するための空行を用意する

図3 「private void Produ」まで入力し、IntelliSense の候補からメソッド名を補完しているところ

図4 ProductChanged() メソッドが作成された状態。中身はまだ空のまま

この時点でのコードは次のとおりです。

private void ProductChanged()
{
}

select要素に @bind:after を追加する

続いて、商品名のプルダウンに使われている select 要素を確認します。この select には既に @bind=”_selectedProductId” が設定されています。

図5 @code ブロック全体を表示し、商品プルダウン(select要素)を含む画面全体の構成を確認しているところ

図6 select 要素に既に設定されている @bind=”_selectedProductId” を確認しているところ

この @bind の次の行に、@bind:after= で先ほど作成した ProductChanged を指定します。行を追加する場所はどこでも構いませんが、わかりやすいように @bind の直後の行に追記します。

図7 @bind=”_selectedProductId” の次の行にカーソルを置き、新しい行を追加したところ

図8 @bind: と入力すると、IntelliSense に @bind や @bind-、tabindex などの候補が表示される

図9 @bind:after=”product まで入力すると、IntelliSense に ProductChanged メソッドの候補が表示される

候補から ProductChanged を選択すると、次のように入力が完了します。

図10 @bind:after=”ProductChanged” の入力が完了した状態

動作確認

ProductChanged メソッドにブレークポイントを設置し、実行して動作を確認します。

図11 ProductChanged() メソッドの中身にブレークポイントを設置したところ

実行して計測設定画面を開き、商品名のプルダウンを開くと、選択肢として p100・p200・p300 が表示されます。

図12 計測設定画面でプルダウンを開いた状態。商品名を入力してください、p100、p200、p300 の選択肢が表示されている

2番目の p200 を選択すると、設置したブレークポイントで処理が停止します。このとき _selectedProductId を確認すると、選択した値である 200 になっており、正しくイベントが発生していることがわかります。

図13 ブレークポイントで停止し、_selectedProductId が 200 になっていることをマウスオーバーで確認しているところ

続けて実行を再開し、3番目の p300 を選択すると、同様にブレークポイントで停止し、今度は _selectedProductId が 300 になっていることが確認できます。

図14 3番目の商品を選択したときに、_selectedProductId が 300 になっていることを確認しているところ

プルダウンのチェンジイベントは、このような要領で取得してください。

inputのoninputとの違い

以前、input要素でイベントを取得したときには、@bind:event=”oninput” という記述を使いました。これは、既定ではロストフォーカス時にしか値が反映されないところを、リアルタイムで通知させるための指定です。

図15 Home.razor の input 要素。@bind:event=”oninput” と @bind:after=”AreaChanged” が設定されている

一方、プルダウン(select要素)の場合は、選択した時点で oninput と同じ動きで通知が来る仕様になっているため、@bind:event=”oninput” の記述は特に必要ありません。@bind:after だけを入れておけば十分です。

まとめ

最終的な select 要素のコードは次のとおりです。@bind:after=”ProductChanged” を追加するだけで、プルダウンの選択が変わったタイミングで任意の処理を実行できるようになります。

<select class="form-select"
        @bind="_selectedProductId"
        @bind:after="ProductChanged"
        disabled="@_productDisabled">
    <option value="-1" selected>商品名を入力してください</option>
    @foreach (var val in _products)
    {
        <option value="@val.ProductId">@val.ProductName</option>
    }
</select>

 

図16 完成した select 要素のコード。@bind=”_selectedProductId” の下に @bind:after=”ProductChanged” が追加されている

BlazorでのWebアプリケーション開発手法1【C#】

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を適応する