今回はプルダウン(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型のフィールドをデータバインドしておき、条件に応じてその値を切り替えるようにしてみてください。
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を適応する