BLOGブログ
ASP.NET MVC5 で初期エラーメッセージの変更方法
ASP.NET MVC5で初期エラーメッセージを変更する方法を、ネットで検索してもなかなかお目当ての情報にたどり着けませんでした。
とりあえず、簡単な方法でメッセージを変更してみましたが、冗長的な記述が増えスマートではなかったので、根本的な変更方法を調べてみました。
根本的に直さずに、そのまま開発している人も多数いるとは思います。参考になれば良いかなっと…。
見出し
初期設定で表示されるエラーメッセージ
XXX フィールドが必要です。
初期設定のままで、表示されるエラーメッセージはこんな感じ。
XXX を入力してください。
や
XXX は、必須入力です。
などの文言に変えたくなるエラーメッセージです。
(エラーメッセージに「フィールド」というキーワード使わないと思いますが、どうでしょうか。直訳ですかね。)
環境
- Visual Studio 2015(Community可)
- ASP.NET MVC5
- 新規プロジェクトに「ASP.NET Web アプリケーション」を選択
「MVC」チェックボックスをチェック
認証:は「個別のユーザーアカウント」
(認証がないと登録画面が無いので手軽な検証箇所がないため)
ウィーザードで作ったプロジェクトをそのまま起動してナビバーの登録を押すと下記画面が表示されます。
電子メールとパスワードがちょうど良い検証箇所なので、この画面を使って試したいと思います。
お手軽な変更方法
登録画面にある、電子メールの必須入力エラーメッセージを修正しようと思うので、
修正対象クラスは、 RegisterViewModelクラスになります。
(ソースでいうとProjectカレント¥Models¥AccountViewModels.cs)
Required アトリビュートのErrorMessageプロパティに{0}(パラメータ)と表示したい文字をセットする。
修正前
1 2 3 4 |
[Required] [EmailAddress] [Display(Name = "電子メール")] public string Email { get; set; } |
修正後
1 2 3 4 |
[Required(ErrorMessage = "{0}を入力してください。")] [EmailAddress] [Display(Name = "電子メール")] public string Email { get; set; } |
動作確認画面
電子メールが未入力の状態で登録ボタンを押すと、「電子メールを入力してください。」のメッセージが表示されるようになりました。
{0}(パラメータ)には、Display属性のNameプロパティで指定している文字列が使われるので、パスワードも同じように修正すれば同様のメッセージが表示されるようになります。
いけてる変更方法
必須入力の初期エラーメッセージ自体をXXX を入力してください。
に変更する方法です。
メッセージの文字列も変えたい時に、すぐ変えられるようにリソースファイルとしてが外部に定義します。
エラーメッセージをメッセージリソースに設定
- ソリューションエクスプローラのサイト名を右クリックして
「追加」をクリック
「ASP.NET フォルダの追加」をクリック
「App_GlobalResources」をクリック
上記手順でリソースファイルを追加する「App_GlobalResources」フォルダが作成されます。 - 「App_GlobalResources」フォルダを右クリックして
「追加」をクリック
「リソースファイル」をクリック
項目名に「Messages」 と入力し「OK」をクリック
上記操作で「Messages.resx」ファイルと言うメッセージリソースを定義するファイルが作成されます。 - 「Messages.resx」ファイルをダブルクリックすると、エディタが起動します。
名前に、「PropertyValueRequired」
値に、「{0}を入力してください。」
を入力して保存します。
必須エラーメッセージのカスタマイズ
- ソリューションエクスプローラのサイト名を右クリックして
「追加」をクリック
「新しいフォルダ」をクリック
フォルダ名を「CustomValidations」にする - 「CustomValidations」フォルダを右クリックして「追加」をクリック
「クラス」をクリック
クラス名を「CustomRequiredAttributeAdapter」にする - 「CustomRequiredAttributeAdapter」クラスを下記のように修正する
「CustomRequiredAttributeAdapter」クラスの記述内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using Resources; using System.ComponentModel.DataAnnotations; using System.Web.Mvc; namespace Etr.CustomValidations { public class CustomRequiredAttributeAdapter : RequiredAttributeAdapter { public CustomRequiredAttributeAdapter(ModelMetadata metadata, ControllerContext context, RequiredAttribute attribute) : base(metadata, context, attribute) { // 作成したリソースファイルを指定 attribute.ErrorMessageResourceType = typeof(Messages); // リソースファイルに記述した名前を指定 attribute.ErrorMessageResourceName = "PropertyValueRequired"; attribute.ErrorMessage = null; } } } |
アプリケーションにカスタマズした内容を適用
- 「Global.asax」ファイルをダブルクリックしエディタを起動
「MvcApplication」クラスのApplication_Start() メソッド内の末部にを下記を参考に2行を追加する。
「MvcApplication」クラスの記述内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
namespace SimpleWebApp { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); // メッセージリソースファイルの定義と必須チェック時のカスタム属性と追加(追加下記2行) DefaultModelBinder.ResourceClassKey = "Messages"; DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredAttribute), typeof(CustomRequiredAttributeAdapter)); } } } |
完成です。
動作確認画面
電子メール、パスワード共に未入力で登録ボタンを押すと、「電子メールを入力してください。」「パスワードを入力してください。」のメッセージが表示されるようになりました。
あとがき
必須入力のエラーメッセージなどは、アプリ内で統一したメッセージを表示すると共に、フレームワーク側でその定義は吸収したいですよね。
手順は少し面倒くさいですが、覚えておくと役に立ちます。
ではでは。