
【Blazor】 検証付きフォームの作成方法
Blazorには、組み込みのフォームコンポーネントが用意されています。 今回はそのコンポーネントを用いて、検証付きフォームを作成する方法について解説していきます。
- フォームを作成してみよう
- フォームに検証機能を追加
目次
フォームを作成してみよう

Blazorで用意されているEditFormコンポーネントを使用して、名前と電子メールを入力するフォームを作成していきます。
<EditForm Model="formData" OnSubmit="Submit"> <div class="form-group"> <label for="name">名前</label> <InputText id="name" class="form-control" @bind-Value="formData.Name" /> </div> <div class="form-group"> <label for="email">電子メール</label> <InputText id="email" class="form-control" @bind-Value="formData.Email" /> </div> <button type="submit" class="btn btn-primary">送信</button> <p>@sendMessage</p> </EditForm> @code { private FormData formData = new FormData(); private string? sendMessage; private void Submit() { sendMessage = "フォームが送信されました。"; } private class FormData { public string Name { get; set; } public string Email { get; set; } } }
EditFormの要素には、Model属性とOnSummit属性を指定します。 Model属性には、フォームで入力された情報を格納するクラスのインスタンスを指定し、 OnSubmit属性には、フォームの内容の送信する処理を指定します。
このコードでは、送信処理にOnSubmit属性を使用しています。 OnSubmit属性ではフォームが正しく入力されているかの検証を実行しません。 検証するパターンもこの記事で紹介しますので、ご安心ください。
他の属性には、以下のような種類があります。
要素名 | 機能説明 |
---|---|
OnSubmit | 検証有無にかかわらず、発生する |
OnValidSubmit | 検証結果が正常の場合のみ発生する |
OnInValidSubmit | 検証結果が異常の場合のみ発生する |
それでは実行してみます。フォームが表示されて、ボタンを押すと[フォームが送信されました。]のメッセージが表示されます。

フォームに検証機能を追加

一般的に、フォームには検証機能が備わっているものが多いです。 しかしながら、先ほど作成したフォームでは、未入力でも送信することができてしまいます。
そのため、先ほど作成したフォームに検証機能を追加していきます。
Submit属性を変更
EditFormコンポーネントのOnSubmit属性をOnValidSubmit属性へ変更します。 変更することで、検証成功時のみ送信処理を行うようになります。
それに合わせて、Submitメソッドの名称もValidSubmitメソッドへ変更しておきます。
---- 省略 ---- <EditForm Model="formData" OnValidSubmit="ValidSubmit"> ---- 省略 ---- </EditForm> @code { ---- 省略 ---- private void ValidSubmit() { sendMessage = "フォームが送信されました。"; } ---- 省略 ---- }
検証用のアノテーションを付与する
ModelクラスであるFormDataクラスのプロパティにアノテーションを付与していきます。
Nameプロパティには入力必須であるRequired属性を付与し、 EmailにはRequired属性とメールアドレス形式かどうか確認するEmailAddress属性を付与します。
各属性の引数であるErrorMessageには、検証失敗時に表示するメッセージを入力します。
private class FormData { [Required(ErrorMessage = "名前を入力してください。")] public string Name { get; set; } [Required(ErrorMessage = "電子メールを入力してください。")] [EmailAddress(ErrorMessage = "有効な電子メールアドレスを入力してください。")] public string Email { get; set; } }
その他の代表的な検証属性には、次のようなものがあります。
属性名 | 説明 |
---|---|
CreditCard | クレジットカード形式 |
Compare | 2つのプロパティを比較 |
EmailAddress | 電子メール形式 |
Phone | 電話番号形式 |
Range | 範囲 |
RegularExpression | 正規表現 |
Required | 必須 |
StringLength | 文字列の長さ制限 |
Url | URL形式 |
アノテーション検証コンポーネントを追加
アノテーションによる検証を行うために、DataAnnotationsValidatorコンポーネントを追加します。 これを追加することで、Modelに先ほど付与したアノテーション属性を元にバリデーションを行ってくれるようになります。
また、検証時に失敗したエラーメッセージを表示するために、ValidationMessageコンポーネントを追加します。 エラーメッセージはアノテーションを付与したときに、設定した文字列が表示されます。
<EditForm Model="formData" OnValidSubmit="ValidSubmit"> @* アノテーションによる検証で必要 *@ <DataAnnotationsValidator /> <div class="form-group"> <label for="name">名前</label> <InputText id="name" class="form-control" @bind-Value="formData.Name" /> </div> @* 検証でエラーが発生した際のメッセージ *@ <ValidationMessage For="@(() => formData.Name)" /> <div class="form-group"> <label for="email">電子メール</label> <InputText id="email" class="form-control" @bind-Value="formData.Email" /> </div> @* 検証でエラーが発生した際のメッセージ *@ <ValidationMessage For="@(() => formData.Email)" /> <button type="submit" class="btn btn-primary">送信</button> <p>@sendMessage</p> </EditForm> }
これでコードの準備は完了です。
コード全体の確認
これまでの説明までのコード全体を確認します。間違いがないかどうかを確認してみてください。
@page "/" @using System.ComponentModel.DataAnnotations; <EditForm Model="formData" OnValidSubmit="ValidSubmit"> @* アノテーションによる検証で必要 *@ <DataAnnotationsValidator /> <div class="form-group"> <label for="name">名前</label> <InputText id="name" class="form-control" @bind-Value="formData.Name" /> </div> @* 検証でエラーが発生した際のメッセージ *@ <ValidationMessage For="@(() => formData.Name)" /> <div class="form-group"> <label for="email">電子メール</label> <InputText id="email" class="form-control" @bind-Value="formData.Email" /> </div> @* 検証でエラーが発生した際のメッセージ *@ <ValidationMessage For="@(() => formData.Email)" /> <button type="submit" class="btn btn-primary">送信</button> <p>@sendMessage</p> </EditForm> @code { private FormData formData = new FormData(); private string? sendMessage; private void ValidSubmit() { sendMessage = "フォームが送信されました。"; } private class FormData { [Required(ErrorMessage = "名前を入力してください。")] public string Name { get; set; } [Required(ErrorMessage = "電子メールを入力してください。")] [EmailAddress(ErrorMessage = "有効な電子メールアドレスを入力してください。")] public string Email { get; set; } } }
それでは、実行してみます。 名前は未入力、メールアドレスは不正な文字列を入力して、送信ボタンを押した際に検証が行われることを確認します。

検証できていることが確認できました。是非色々なフォームを作って検証してみてください。
この本では、Blazorの基本から高度なテクニックまで、実際のプロジェクトに役立つ知識を網羅しています。 初心者から経験者まで、Blazorを扱うすべての開発者にとっての必読書です。 この記事の執筆者も参考にした「Blazor入門」で、あなたのBlazorスキルを飛躍的に向上させませんか?
合わせて読みたい

RazorファイルをHTMLとC#に分割する
Blazorはコンポーネント駆動フレームワークで、.razorファイルのHTMLとC#コードの分割方法(コードビハインド)を2つ紹介。一つは[Partialクラス]を使用し、もう一つは[継承]を利用。選択方法はプロジェクトの要件により変わるため、適切な方法を選ぶことがキーとなります。
更新日:2023/09/06

コンポーネント間のイベント受け渡し方
Blazorでの部品コンポーネントからのイベント取得方法を解説。イベントの返却にはEventCallbackを使用し、<>内に変数を指定。多変数の場合はクラスを作成。今回はMouseEventArgsを返却。作成した部品コンポーネントはページ内で利用し、イベント発生時にShowMessageが呼ばれ、メッセージが表示されることを確認。
更新日:2023/07/19