IT業界のすみっこ暮らし

ふと気がついたときの記録

ASP.NET MVC:ModelStateからエラーメッセージを取得

pie001.hatenablog.com

前回上記の記事でも軽く書いたが、エラーメッセージ取得部だけをキーによる取得方法も加えてまとめてみた。

0、下記のようにModelStateにエラーを宣言し、エラーメッセージ(stringリスト)を取得する

ModelState.AddModelError("Parameter", "パラメーターが正しくありません。P1");
ModelState.AddModelError("Parameter", "パラメーターが正しくありません。P2");
ModelState.AddModelError("Parameter", "パラメーターが正しくありません。P3");
ModelState.AddModelError(string.Empty, "パラメーターが正しくありません。1");
ModelState.AddModelError(string.Empty, "パラメーターが正しくありません。2");
ModelState.AddModelError(string.Empty, "パラメーターが正しくありません。3");


1、ModelStateにある全てのエラーメッセージを取得

①SelectMany利用

var errormsgs = ViewData.ModelState.SelectMany(x => x.Value.Errors.Select(z => z.ErrorMessage)).ToList();

②foreach利用

var allErrorList = new List<string>();
foreach (ModelState modelState in ViewData.ModelState.Values)
{
    foreach (ModelError error in modelState.Errors)
    {
        allErrorList.Add(error.ErrorMessage);
    }
}

取得結果(List<string>の中身)

Index ErrorMessage
0 パラメーターが正しくありません。P1
1 パラメーターが正しくありません。P2
2 パラメーターが正しくありません。P3
3 パラメーターが正しくありません。1
4 パラメーターが正しくありません。2
5 パラメーターが正しくありません。3


2、ModelStateにある特定のキーのエラーメッセージだけを取得

var param = ViewData.ModelState["Parameter"];
var paramErrorList = new List<string>();

// ViewData.ModelState[key]に存在しないキーを指定した場合、nullを返す
if (param != null)
{
    paramErrorList = param.Errors.Select(x=>x.ErrorMessage).ToList();
}

取得結果(List<string>の中身)

Index ErrorMessage
0 パラメーターが正しくありません。P1
1 パラメーターが正しくありません。P2
2 パラメーターが正しくありません。P3