유효성검사는 데이터베이스에 올바른 데이터를 적제하기 위한 필수적인 기능중에 하나이다. 요즈음에는 이런 유효성검사를 여러가지 방법으로 구현하고 있는데 , 기본적으로 MVC에도 이러한 유효성 검사 기능이 폭넓게 구현되어 있다. 이러한 유효성 검사는 그 형태에 따라 몇가지 형태로 구분되어 진다.

 

1.     인풋값에 들어간 값에 대한 검증.

2.     Model 에 대한 유효성 검증.

 

인풋값에 들어간 값에 대한 검증은 , 해당 컨트롤에 대해서 수동으로 검사하고 에러메시지를 삽입하는 것 뜻한다. 그러나 이러한 수동적인 작업없이 , Model 자체에 대해 유효성 검사를 실시할수도 있다. 인풋값에 들어간 값에 대한 검증을 하고 ,에러메시지를 표시하는 기능 자체는 개발자의 기호와 디자인에 따라서 사용할수 없을수도 있으나 , MVC자체의 모델을 검증할수 있기 때문에 실무에서도 유용하게 쓰이는 편이다. 이번장에서는 두가지 유효성 검사 방법을 살펴보도록 하겠다.

 

Note : 해당 기능을 정상적으로 활용하기 위해서는 layout 페이지에 jquery를 추가해줘야 한다.

 

<!DOCTYPE html>

 

<html>

<head>

    <title>@ViewBag.Title</title>   

    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>   

</head>

<body>

        @Html.Partial("Header")

    <div>

        @RenderBody()

    </div>

       

</body>

</html>


[코드 : layoutmaster.cshtml]

 

이전에 작업했던 소스에서 Create.cshtml 소스를 살펴보도록 하겠다

 

@model HelloworldApp3.Models.TestTable

 

@{

    ViewBag.Title = "Create";

    Layout = "~/Views/Shared/_LayoutMaster.cshtml";

}

 

<h2>Create</h2>

 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

 

@using (Html.BeginForm()) {

    @Html.ValidationSummary(true)

    <fieldset>

        <legend>TestTable</legend>

 

        <div class="editor-label">

            @Html.LabelFor(model => model.SomeData)

        </div>

        <div class="editor-field">

            @Html.EditorFor(model => model.SomeData)

            @Html.ValidationMessageFor(model => model.SomeData)

        </div>

 

        <p>

            <input type="submit" value="Create" />

        </p>

    </fieldset>

}

 

<div>

    @Html.ActionLink("Back to List", "Index")

</div>


 

 

이곳에 이미 기본적인 유효성검사 로직이 삽입되어 있는 것을 알수 있다. 이를 먼저 살펴보자.

 

 

@Html.ValidationSummary(true)


에러메시지를 종합적으로 보여주는 메서드이다.

@Html.ValidationMessageFor(model => model.SomeData)


해당 모델에 해당되는 메시지이다.

 

이로써 기본적인 validation 체크가 가능해진다. DateTime 같은경우나 , 해당 필드에 빈값이 들어갈수 없는 경우 MVC의 Validation 은 자동으로 이를 감지해준다

8_1.png
[그림 : 등록일자에 빈값이 들어가는경우 , 빈값을 넣을수 없기 떄문에 validation 메시지가 나타난다.]

 

8_2.png
[그림 : 위와같이 날짜 포멧이 정상적이지 않을때도(2월에 30일은 없음) 정상적으로 오류를 감지해준다]

 

이 외에도 자신이 설정한 메시지를 validation 메시지에 내보내고 싶은분도 있을 것이다.

이런경우 간단한 코딩으로 이 기능을 구현할수 있다.

 

Create 페이지를 다음과 같이 수정한다.

 

[HttpPost]

public ActionResult Create(TestTable testtable)

{

    if (testtable.SomeData == "LoveCiel")

    {

        ModelState.AddModelError("SomeData", "LoveCiel 테스트용 에러메시지");

    }

     if (ModelState.IsValid)

     {

         db.TestTable.AddObject(testtable);

         db.SaveChanges();

         return RedirectToAction("Index"); 

     } 

     return View(testtable);

}


 

ModelState 는 현재 View 에서 전송 받은 Model 의 상태를 점검하는 객체이다. 이곳에 ModelError 객체가 포함되어 있으면 ModelState.IsValid 가 False 를 반환하게 되고 , 이를 에러로 감지해 낼수 있게 된다.

 

 

8_3.png
[그림3 : 사용자 정의 ErrorMsg]

 

 

Summary

 

다음 장에서는 실질적인 Validation 을 사용하기 위해 ModelBinder 에 대해 알아보도록 하겠다. 이 두장을 습득함으로써 MVC의 유효성 검사에 관한 기능은 전부 익힐수 있을것이다.



ASP.NET MVC3 시리즈 강좌 리스트
[ASP.NET MVC3강좌] 1. MVC(Model- View – Controller) 란 무엇인가.
[ASP.NET MVC3강좌] 2. MVC 환경 세팅
[ASP.NET MVC3강좌] 3. HelloWorld MVC
[ASP.NET MVC3강좌] 4. Layout , Partial Page
[ASP.NET MVC3강좌] 5. Model 을 View에서 표현하기
[ASP.NET MVC3강좌] 6. MVC의 매력적인 기능 스캐폴딩!(With EF)
[ASP.NET MVC3강좌] 7. 유효성 검사
[ASP.NET MVC3강좌] 8. ModelBinder
[ASP.NET MVC3강좌] 9. MVC ActionResult 종류 살펴보기
[ASP.NET MVC3강좌] 10. MVC 처리 프로세스 & ActionFilter
[ASP.NET MVC3강좌] 11. Global.asax
[ASP.NET MVC3강좌] 12. (번외편) Repository Pattern
[ASP.NET MVC3강좌] 13. MEF(Managed Extensibility Framework) in MVC
[ASP.NET MVC3강좌] 14. Javascript in MVC
[ASP.NET MVC3강좌] 15. Javascript Intellicense in Visual Studio
[ASP.NET MVC3강좌] 16. JSON in MVC - 1
[ASP.NET MVC3강좌] 17. JSON in MVC - 2
[ASP.NET MVC3강좌] 18. HTML5 in MVC
[ASP.NET MVC3강좌] 19. MVC Tips 1 - HandleUnknownAction
[ASP.NET MVC3강좌] 20. MVC Tips 2 - Cache ActionFilter






profile

ASP.NET MVP 2009~2011