アプリを作る際、ユーザーからの入力を受け付けるフォームと、その入力内容をチェックするバリデーションは欠かせません。
この記事では、Blazorの代表的な入力フォームコンポーネントであるEditFormの使い方と、DataAnnotationsを使ったバリデーションの基本を解説します。
フォームの基本と主な入力コンポーネント
Blazorではフォームを作るときにEditForm
コンポーネントを使います。
以下はフォーム全体の例です。(アプリ名はBlazorFormSampleとなっているので適宜ご自身のものに変えてください)
@page "/bookform"
@using BlazorFormSample.Data
<EditForm Model="@book" OnValidSubmit="HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div>
<label>タイトル</label><br />
<InputText @bind-Value="book.Title" />
<ValidationMessage For="@(() => book.Title)" />
</div>
<div>
<label>著者</label><br />
<InputText @bind-Value="book.Author" />
<ValidationMessage For="@(() => book.Author)" />
</div>
<div>
<label>価格</label><br />
<InputNumber @bind-Value="book.Price" />
<ValidationMessage For="@(() => book.Price)" />
</div>
<div>
<label>ISBN</label><br />
<InputText @bind-Value="book.Isbn" />
<ValidationMessage For="@(() => book.Isbn)" />
</div>
<button type="submit">登録</button>
</EditForm>
@code {
private BookModel book = new();
// Submit時に実行されるメソッド
private void HandleValidSubmit()
{
Console.WriteLine($"登録: {book.Title}");
}
}
EditForm
で重要なのは次の2つの属性です。
- Model:入力内容を保持するC#クラス(今回はBookModel)を指定
- OnValidSubmit:エラーが無かった場合に呼び出すメソッドを指定
また、<DataAnnotationsValidator />
は、DataAnnotationsによるバリデーションを行う際は必ず指定する必要があります。
入力欄は以下の専用コンポーネントを使って構成します。
InputText
:文字列(Title, Author, Isbn)InputNumber
:数値(Price)
ここではValidationSummary
でエラーをまとめて表示し、ValidationMessage
で項目ごとのエラーを表示しています。(後ほど説明します)
DataAnnotationsでのバリデーション
入力チェックは、モデルのプロパティに属性(DataAnnotations)を付けるだけで実現できます。
よく使う属性は以下の4種類です。
[Required]
:必須入力[StringLength]
:文字数制限[Range]
:数値の範囲指定[RegularExpression]
:正規表現による形式チェック
以下はモデルの例です。
using System.ComponentModel.DataAnnotations;
namespace BlazorFormSample.Data;
public class BookModel
{
[Required(ErrorMessage = "タイトルは必須です。")]
[StringLength(200, ErrorMessage = "タイトルは200文字以内で入力してください。")]
public string Title { get; set; } = "";
[Required(ErrorMessage = "著者は必須です。")]
[StringLength(100, ErrorMessage = "著者は100文字以内で入力してください。")]
public string Author { get; set; } = "";
[Range(0, 100000, ErrorMessage = "価格は0以上100000以下で入力してください。")]
public decimal Price { get; set; }
[Required(ErrorMessage = "ISBNは必須です。")]
[RegularExpression(@"^\d{10}(\d{3})?$", ErrorMessage = "ISBNは10桁または13桁の数字を入力してください。")]
public string Isbn { get; set; } = "";
}
これで、タイトルや著者が空欄のとき、価格が範囲外のとき、ISBNが10桁または13桁の数字でないときに自動でエラーメッセージが出ます。
デバッグ実行して /bookform
にアクセスし、登録ボタンをクリックすると以下のようにエラーメッセージが表示されます。

バリデーションエラーの表示方法
バリデーションエラーの表示には2種類あります。
ValidationMessage
- 項目ごとの下にメッセージを表示。
- ユーザーがどこを直すべきか一目でわかる。
ValidationSummary
- ページ上部などに、まとめてエラーを表示。
- 複数項目のエラーを一覧できる。
実務では、入力項目が少ないフォームならValidationMessage
だけで十分ですが、項目が多いフォームでは上部にValidationSummary
を出して全体を把握できるようにすると、ユーザーフレンドリーな入力フォームになります。
まとめ
- Blazorでは
EditForm
+DataAnnotations
を使うだけで簡単にバリデーションができる。 - 必須・桁数・範囲・正規表現の4種類を押さえておけば、基本的な入力チェックは十分。
- エラーメッセージは
ValidationMessage
で項目ごとに表示したり、ValidationSummary
で全体を補足することができる。
【おすすめ書籍】

参考ドキュメント

