記事内に広告が含まれています

【Blazor】フォームとバリデーションの基本

blazorフォームとバリデーションの基本 Blazor

アプリを作る際、ユーザーからの入力を受け付けるフォームと、その入力内容をチェックするバリデーションは欠かせません。

この記事では、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種類あります。

  1. ValidationMessage
    • 項目ごとの下にメッセージを表示。
    • ユーザーがどこを直すべきか一目でわかる。
  2. ValidationSummary
    • ページ上部などに、まとめてエラーを表示。
    • 複数項目のエラーを一覧できる。

実務では、入力項目が少ないフォームならValidationMessageだけで十分ですが、項目が多いフォームでは上部にValidationSummaryを出して全体を把握できるようにすると、ユーザーフレンドリーな入力フォームになります。

まとめ

  • BlazorではEditFormDataAnnotationsを使うだけで簡単にバリデーションができる。
  • 必須・桁数・範囲・正規表現の4種類を押さえておけば、基本的な入力チェックは十分。
  • エラーメッセージはValidationMessageで項目ごとに表示したり、ValidationSummaryで全体を補足することができる。

【おすすめ書籍】

著:伊藤 稔, 著:大田 一希, 著:小山 崇, 著:辻本 海成, 著:久野 太三, 著:赤間 信幸, 著:井上 章
¥3,168 (2025/09/11 15:55時点 | Amazon調べ)

参考ドキュメント

ASP.NET Core Blazor フォームの概要
Blazor でフォームを使用する方法について説明します。
ASP.NET Core Blazor フォームの検証
Blazor フォームで検証を使用する方法について説明します。
Blazor

コメント

タイトルとURLをコピーしました