본문 바로가기
개발/ASP.NET

ASP.NET MVC : ModelState에서 에러 메세지를 취득하기

by ispie 2019. 1. 24.

ASP.NET MVC : ModelState의 에러 메세지 리스트를 취득해서 Json으로 반환시키기

 

위 기사에서도 가볍게 다뤘지만 에러 메세지를 키를 이용해서 취득하는 방법을 추가로 정리해 보았습니다.

 

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에 있는 모든 에러메세지를 취득할 경우

 

1-1. SelectMany를 이용할 경우

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

 

1-2. 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();
}

 

Index  ErrorMessage
 0  파라미터에 문제가 발생했습니다. P1
 1  파라미터에 문제가 발생했습니다. P2
 2  파라미터에 문제가 발생했습니다. P3

 

 

댓글