Blazor02

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

前回のレクチャーでは、ValidationSummaryコンポーネントを使ってバリデーションエラーを表示する方法を解説しました。ValidationSummaryを使うと、複数の項目にエラーがあっても、画面の一箇所にまとめてエラーメッセージが表示されます。

図1: ValidationSummaryによるエラー表示(一箇所にまとめて表示される)

基本的にはValidationSummaryを使うだけで十分なケースが多いのですが、「項目ごとに、その項目の近くに個別でエラーメッセージを出したい」という場合もあります。たとえば、エリア名称の入力欄にエラーがあれば、エリア名称の欄のすぐ下にエラーを表示する、といった見せ方です。今回は、そのようなケースで使う ValidationMessage コンポーネントについて解説します。

ValidationMessageコンポーネントを追加する

エリア名称の入力欄(input要素)の下に、ValidationMessageコンポーネントを追加します。入力し始めると、IntelliSenseがコンポーネントの説明を表示してくれます。

図2: ValidationMessageと入力するとIntelliSenseが説明を表示する(「指定したフィールドのカスケードされたEditContext内での検証メッセージの一覧を表示する」という内容)

ValidationMessageコンポーネントには、どの項目のエラーを表示するかを指定するためのForという属性があります。

図3: For属性がIntelliSenseの候補として表示される

Forには、対象のプロパティを返すラムダ式を、@() で囲んで指定します。エリア名称の場合は次のようになります。

図4: エリア名称の入力欄用に追加したValidationMessage(For=”@(()=>AreaName)”)

<div class="mb-3">
    <label>エリア名称</label>
    <input type="text" @bind="AreaName" />
    <ValidationMessage For="@(()=>AreaName)" />
</div>

For属性にマウスを合わせると、AreaNameが Home コンポーネントの string 型プロパティ(get; private set;)であることが確認できます。ここで指定するのは、値そのものではなく「そのプロパティを返す関数(ラムダ式)」である点がポイントです。

図5: AreaNameにカーソルを合わせると型情報がツールチップで表示される(string Home.AreaName { get; private set; })

担当者の入力欄にも同様に追加する

担当者(ManagerName)の入力欄にも、同じ要領でValidationMessageを追加します。Forに指定するプロパティ名をManagerNameに変えるだけです。

図6: 担当者の入力欄用に追加したValidationMessage(For=”@(()=>ManagerName)”)

<div class="mb-3">
    <label>担当者</label>
    <input type="text" @bind="ManagerName" />
    <ValidationMessage For="@(()=>ManagerName)" />
</div>

動作確認

この状態で実行し、両方の項目を未入力のまま保存ボタンを押すと、各項目のすぐ下に個別のエラーメッセージが表示されます。ただし、まだValidationSummaryを残しているため、画面下部にはこれまで通りまとめてのエラー一覧も表示されます。

図7: 個別のValidationMessageと、既存のValidationSummaryが両方表示されている状態

個別にエラーを表示するのであれば、ValidationSummaryは不要になるため、コメントアウトしておきます。

図8: ValidationSummaryをRazorコメント(@* … *@)でコメントアウトする

アプリを再実行すると、初期状態ではエラーは表示されません。

図9: 再実行直後の画面(エラーメッセージなし)

担当者だけに値を入力した状態で保存を試みると、未入力のエリア名称の欄にだけエラーメッセージが表示され、担当者側にはエラーが出ません。

図10: 担当者のみ入力済みの場合、エリア名称の欄にだけエラーが表示される

逆にエリア名称だけに値を入力した場合は、担当者の欄にだけエラーメッセージが表示されます。このように、ValidationMessageを使うと、エラーのある項目だけ、その項目の近くにピンポイントでメッセージを出すことができます。

図11: エリア名称のみ入力済みの場合、担当者の欄にだけエラーが表示される

最後に、両方の項目に値を入力して保存ボタンを押すと、「保存しますか?」という確認ダイアログが表示され、OKを押すとエラーなく保存が完了します。

図12: 両方入力済みで保存を押すと確認ダイアログが表示される

図13: OKを押すとエラーメッセージは表示されず、保存処理が完了する

このように、画面全体でまとめてエラーを表示したい場合はValidationSummary、項目ごとに個別で表示したい場合はValidationMessageを使う、という使い分けができます。個別に出したい場合は、今回のようにValidationMessageのFor属性に対象プロパティを返すラムダ式を指定して使ってみてください。

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

■非公開コース「C#14新機能」プレゼント:
非公開コース「C#14新機能」(80分)をご覧になりたい方は
こちらからURLとパスワードを発行していますので、ご覧になってみてください。
非公開コース「C#14新機能」を観る

A01_はじめに
B01_メッセージを出すレイアウトの作成
B02_pタグを使ったメッセージ表示
B03_ポップアップメッセージを表示する方法
B04_問い合わせメッセージを表示する方法
B05_ユーザーの入力を受けるメッセージ
B06_インラインJavaScript非推奨
B07_Javascriptを分離してアクセスする方法
B08_MessageServiceを作成する
B09_自作Serviceの依存性注入をする方法
C01_EditFormを使った入力検証
C02_ValidationSummary
C03_ValidationMessage
C04_入力コンポーネント_InputText
C05_InputNumber
C06_未入力を許容する方法
C07_InputNumberで対応している型
C08_InputDate
C09_InputSelect
C10_入力コンポーネント_InputCheckbox
C11_InputRadioとInputRadioGroup
C12_InputTextArea
C13_InputFile
C14_ファイルの上限を設定する
C15_フォーカスをあてる方法_標準編_ElementReference
C16_フォーカスをあてる方法_Razorコンポーネント編
D01_StringLength
D02_RegularExpression_正規表現
D03_EmailAddress
D04_Compare
D05_ViewModelに分ける方法
D06_依存性注入を利用したViewModelの生成
D07_CustomValidation1
D08_CustomValidation2
D09_プロパティレベルのCustomValidation
D10_ValidationContext
D11_処理をViewModelに移す書き方
D12_ViewModelに移せないロジック
D14_ShouldRender
D15_ViewModelに書かないほうがいいもの
D16_エラー箇所にフォーカスを当てる方法
E01_Azureにデプロイするための事前作業
E02_Azureにアップするアプリの作成
E03_Azureへの公開準備
E04_Azureへの公開
E05_データベースの作成
E06_データベースのデータを取得する
E07_データベースの値を画面に表示する
E08_Azureのデータベースを作成する
E09_Azureのデータベースにポータルサイトからログインする
E10_AzureのDBにテーブルを作成する
E11_BlazorアプリからAzureDBに接続する
E12_SQLデータベース料金の注意
E13_AzureSQLデータベースの無料オファーを受ける
F01_依存性注入のライフサイクル
F02_クラウドでのAddSingletonの動き

■非公開コース「C#14新機能」プレゼント:
非公開コース「C#14新機能」(80分)をご覧になりたい方は
こちらからURLとパスワードを発行していますので、ご覧になってみてください。
非公開コース「C#14新機能」を観る