情報応用演習Ⅰ(2024)

【T6a】検証メッセージのカスタマイズと集約表示(4/5)

プロジェクトタイプASP.NET Core Web アプリ(Model-View-Controller)
プロジェクト名T6a
ソリューション名PIT6
ターゲットフレームワーク.NET 8.0(長期的なサポート)
最上位レベルのステートメントを使用しない使用する(チェックオフ)
注意
  • 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
    • 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
    • プロジェクトの作成作業については準備作業を参照せよ.

6a-4. 検証メッセージのカスタマイズ

C#のコード上でプロパティの型や属性によって設定した,必須かどうかや値の範囲の制約に対する検証メッセージは カスタマイズすることが可能である.ScoreRecordクラスを_に示すように変更してみよう.

ScoreRecordクラスの変更内容
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
public class ScoreRecord
{
    [Display(Name = "ID")]
    public int Id { get; set; }

    [Display(Name = "名前")]
    [Required(ErrorMessage = "あいうえお")]
    public string Name { get; set; } = "";

    [Display(Name = "スコア")]
    [Required(ErrorMessage = "かきくけこ")]
    [Range(0, 999999999, ErrorMessage = "さしすせそ")]
    public int Score { get; set; }

    [Display(Name = "記録日時")]
    [DataType(DataType.DateTime)]
    [Required(ErrorMessage = "たちつてと")]
    public DateTime Recorded { get; set; }
}

_に示す通り,チュートリアル【T4b】で使用した[Range]属性をはじめ,ほとんどの検証用の属性は ErrorMessageプロパティを指定することで検証時のエラーメッセージを変更することができる . なお,_で使用している[Required]属性は,その項目が必須であることを指定するための古い属性である. 現在の ASP.NET Core では必須/任意といった指定は,そのプロパティの型のNull許容性によって指定するが,検証メッセージを 変更する場合は明示的にこの属性を付与する必要がある.

ここまで書けたら実行してみよう.起動したら「新規作成」のリンクをクリックして,入力欄を空にするか範囲外の値を入力してみよう. _のように表示されるはずである.

実行結果

_は試行のために無意味な検証メッセージを設定しているが,実用のためにはより分かりやすいメッセージを指定するべきである. 例として_のように変更しよう.

ScoreRecordクラスの変更内容
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
public class ScoreRecord
{
    [Display(Name = "ID")]
    public int Id { get; set; }

    [Display(Name = "名前")]
    [Required(ErrorMessage = "「名前」は必須項目です.")]
    public string Name { get; set; } = "";

    [Display(Name = "スコア")]
    [Required(ErrorMessage = "「スコア」は必須項目です.")]
    [Range(0, 999999999, ErrorMessage = "「スコア」には0以上999999999以下の値を入力してください.")]
    public int Score { get; set; }

    [Display(Name = "記録日時")]
    [DataType(DataType.DateTime)]
    [Required(ErrorMessage = "「記録日時」は必須項目です.")]
    public DateTime Recorded { get; set; }
}

先ほどと同様に実行すると_のように表示されるはずである.

実行結果

ここまで確認したら次に進もう.

Last updated on 2024-06-10
Published on 2024-06-10

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.