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

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

보통 Model의 Validation 체크를 한 다음 에러를 지정할 경우에는 이하처럼 에러메세지를 설정하고


ModelState.AddModelError("", "xx가 없습니다. 다시 한번 확인해 주세요.");

View에서 ValidationSummary나 ValidationMessage을 사용해서 에러 메세지를 표시합니다.

@Html.ValidationSummary()
@Html.ValidationMessage("hoge")

하지만 Ajax에서 json형식의 리턴값으로서 처리를 끝낸 ModelState의 에러 메세지만을 돌려 받아서 화면에 표시하고 싶을때도 살다보면 생기기 마련입니다…

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

Json으로 결과를 돌려받기 위해 준비한 모델

public class JsonResultModel
{
	public List<string> ErrorList { get; set; }

	public bool IsSuccess { get; set; }

	public CustomerBulkCreateViewModel()
	{
		ErrorList = new List<string>();
	}
}

Action

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CallAction(string id)
{
	var model = new JsonResultModel();
	
	// 하고 싶은 처리

	// modelState에 있는 에러메세지를 화면상에 표시하기 위해 model.ErrorList에 저장
	model.ErrorList = ModelState.Values.SelectMany(e => e.Errors.Select(er => er.ErrorMessage)).ToList();

	return Json(model, "text/json", Encoding.UTF8, JsonRequestBehavior.AllowGet);
}

간단하게 그냥 string 리스트에 에러메세지를 집어 넣는 것도 가능합니다만, Validation 처리를 ModelState에 맡기면 로직부분의 범용성이 높아지고 mvc로서의 기능도 사용할 수 있기 때문에 가능하면 에러를 돌려 받을때는 ModelState를 활용하는 편이 좋다고 생각했습니다.

Pie's Tech Note

생계형 개발자의 메모장

comments powered by Disqus

    rss facebook twitter github youtube mail spotify instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora