redwarrior’s diary

C#, ASP.NET, WEB, G*などの雑多な情報

バリデーションのメッセージを変更する

ASP.NET MVCの入力値の検証は便利ですよね。デフォルトでもメッセージの意図は伝わります。
でも、カラムに必ず○○フィールドは~とつくため、これをなくしたい場合もよくあると思うので変更方法を調べました。

ちなみに、良くあるバリデーションのメッセージを手間をかけずに変更したいので、カスタムValidationについては書いていません。

バリデーションエラーのメッセージを変更したい場合

検証に使用している属性の ErrorMessage プロパティにメッセージを設定します。

第3回 モデル・バインドとアノテーション検証の実装 − @IT

日付型や数値型に別の型(文字列)が入力された時のメッセージを変更したい場合

以下のサイトの2番目の回答(29ポイントのやつ)が大事です。 stackoverflow.com

Global.asax の修正とリソースファイルの作成だけで変更が出来ます。
日付型のメッセージを変更したい場合は、FieldMustBeDate をキーとしてリソースファイルに値を設定します。
数値型の場合は、FieldMustBeNumeric がキーです。

※バリデーションのメッセージとは異なる扱いなので注意。

属性による検証のメッセージでリソースファイルを使用したい場合

以下のサイトの回答が参考になります。 stackoverflow.com

なお手元の環境では、App_GlobalResources.MessagesMessages にして、using Resources; を追加する必要がありました。

必須(Required)属性のメッセージを一括変更したい場合

必須属性のメッセージにリソースファイルを使用する場合や、属性に毎回設定を書きたくない場合は、以下のサイトとリンク先を読むと良いです。

d.hatena.ne.jp

内容に従って、クラスを作成すると必須属性からErrorMessageの指定を削ることが出来ます。

実際どうしたか

最後に、バリデーションのメッセージ変更方法はいくつかありますが、実際のプロジェクトではどうしたかを備忘録として書いておきます。

  • 日付/数値型の不一致の場合……リソースファイルを使用
  • それ以外……属性のErrorMessageプロパティで指定

必須(Required)属性のアダプターは、一度作成してみたのですが、それ以外に正規表現(RegularExpression)、メールアドレス(EmailAddress)、URL(Url)、範囲(Range)属性等々も使用しているため、各々の属性についてアダプターを作成する手間がかかります。

また、既にErrorMessageプロパティに設定する方法でだいぶ進めてしまったので、手間やわかりやすさを考慮した結果、上記のようになりました。

落ち着いた段階でリソースファイルを参照するように直していきたいと思います。

動作環境