Blazor01

BlazorでのWebアプリケーション開発手法1【C#】D12_プルダウンの入力を禁止する

今回はプルダウン(select要素)を入力できないようにする方法を解説します。Blazorのdisabled属性を使うと、Windowsフォームアプリでおなじみの「入力を禁止する」処理を、Webアプリでも簡単に実現できます。

disabled属性を付けてみる

商品プルダウンを入力不可にしたい場合は、select要素にdisabled属性を追加します。属性名を入力し始めると、IntelliSenseの候補一覧にdisabledが表示されます。

図1 select要素にdisabled属性を追加するためのIntelliSense候補

disabledは「無効にしますか?」を表す属性で、Blazorでは@マークを付けてtrue/falseの値をバインドします。値を入力し始めると、IntelliSenseにtrueキーワードが表示されます。

図2 disabled=”@true”と入力する際のIntelliSense

<select class="form-select"
        @bind="_selectedProductId"
        disabled="@true">

 

Windowsフォームアプリの場合はEnabledプロパティにtrueを設定すると「使える」状態になりますが、disabledはその逆で、trueを設定すると「使えなくなる」という意味になります。名前と値の意味の向きが逆になっている点に注意してください。

図3 disabled=”@true”と記述した状態

ブラウザーで動作を確認する

この状態でアプリを実行すると、「周期」のプルダウンは選べるままですが、「商品」のプルダウンはグレーアウトして選べなくなっていることが確認できます。

図4 商品名プルダウンだけが入力不可(グレーアウト)になった状態

disabled=”@true”のように固定でよい場合はこれで完成ですが、実際の開発では「こういう条件のときはプルダウンを使える」「こういう状況のときは使えない」のように、状況に応じて動的に切り替えたい場合のほうが多いはずです。そのような場合は、boolの変数を用意してdisabled属性にデータバインドしておきます。

bool型フィールドでデータバインドする

@codeブロックに、商品プルダウンの入力可否を保持するprivate bool型フィールドを追加します。初期値はfalse(入力可能)にしておきます。

private int _selectedCycle = 2;
private List<ProductEntity> _products
    = new List<ProductEntity>();
private int _selectedProductId = -1;
private bool _productDisabled = false;

 

図5 入力可否を保持するprivate bool _productDisabledフィールドを追加

続いて、disabled属性の値を先ほど固定していた@trueから、このフィールド@_productDisabledに書き換えてデータバインドします。

<select class="form-select"
        @bind="_selectedProductId"
        disabled="@_productDisabled">

 

図6 disabled=”@_productDisabled”にデータバインドした状態

最後に、保存ボタンが呼び出すSave()メソッドの中で、この値を反転(トグル)させる処理を追加します。今の値の否定(!)を代入することで、ボタンを押すたびにtrue/falseが切り替わります。

private void Save()
{
    _selectedCycle = 3;
    _productDisabled = !_productDisabled;
}

 

図7 Save()メソッド内で_productDisabledをトグルする処理

動作確認

アプリを実行すると、最初は商品プルダウンが入力不可の状態になっています。ここで保存ボタンを押すと_productDisabledがfalseに反転し、プルダウンが入力可能になって候補一覧(p100/p200/p300)が選べるようになります。

図8 保存ボタンを押した後、プルダウンが入力可能になり候補が選べる状態

p200を選んだ状態でもう一度保存ボタンを押すと、_productDisabledが再びtrueに反転し、選んだ値(p200)が固定されたままプルダウンが再び入力不可になります。このように、保存ボタンを押すたびに入力できる・できないが切り替わることが確認できます。

図9 もう一度保存ボタンを押すと、選択値(p200)を保持したまま再び入力不可になる

このように、画面項目の入力を禁止したり、有効にしたりしたい場合は、disabled属性にbool型のフィールドをデータバインドしておき、条件に応じてその値を切り替えるようにしてみてください。

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