記事詳細


投稿日
2026年06月09日18時16分
タイトル

ASP.NET MVC: Controller側のif (ModelState.IsValid)がfalseの場合エラーを発生するオブジェクトを見つける方法はありますか?

内容

はい、ASP.NET MVC / ASP.NET Core MVC では、ModelState.IsValid が false の場合、ModelState の中にどのプロパティがエラーを持っているかを簡単に調べることができます。
ModelState は ModelStateDictionary 型で、各キー(プロパティ名)に対して ModelStateEntry があり、その中の Errors コレクションにエラー情報が入っています 1 2

例: エラーのあるプロパティとメッセージを取得する

Csharp
if (!ModelState.IsValid) { var errorList = ModelState .Where(ms => ms.Value.Errors.Count > 0) // エラーがある項目だけ .Select(ms => new { Field = ms.Key, // プロパティ名 Errors = ms.Value.Errors .Select(e => string.IsNullOrEmpty(e.ErrorMessage) ? e.Exception?.Message // ErrorMessageが空ならExceptionのMessage : e.ErrorMessage) .ToList() }) .ToList(); // ログ出力例 foreach (var err in errorList) { Console.WriteLine($"[Field] {err.Field}"); foreach (var msg in err.Errors) { Console.WriteLine($" - {msg}"); } } }

ポイント

  • ms.Key がモデルのプロパティ名(例: "Title""ReleaseDate")。
  • ms.Value.Errors に ModelError オブジェクトが入り、ErrorMessage または Exception で詳細を取得できます。
  • バインド変換エラー(例: "abc" を int に変換しようとした場合)は ErrorMessage が空で、Exception に詳細が入ることがあります 2
  • Razor ビューであれば、@Html.ValidationSummary() や @Html.ValidationMessageFor() を使えば自動的に表示されます。

簡易デバッグ用ワンライナー

デバッグ中に即座に確認したい場合は、Watch ウィンドウ即時実行ウィンドウで以下を実行できます 1

Csharp
ModelState.Where(x => x.Value.Errors.Count > 0) .Select(x => new { x.Key, x.Value.Errors })

もしご希望であれば、このエラー取得処理を共通メソッド化して、どのコントローラーからでも呼び出せるようにするサンプルも作れますが、作りますか?
そうすれば ModelState の中身を毎回 LINQ で書かなくても済みます。

1-Stackoverflow.com 2-Stackoverflow.com

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Controllers
編集 | 記事一覧