MVC 다중 폼 유효성 체크

Posted in .NET Framework // Posted at 2012. 9. 7. 17:10
728x90

MVC 기반의 사용자 화면에서는 다중 입력 폼(form)을 허용한다.

사실 허용한다기 보다는 일반적인 HTML 페이지의 동작을 그대로 수용한 것이다

 

이전 개발 환경인 ASP.NET WebForm에서는 서버 측 폼을 기반으로 작업을 많이 했으며 한 페이지에 오직 하나의 서버 폼이 존재할 수 있었다

 

MVC환경에서는 서버 측 폼이라는 개념을 사용하지 않기에 (일반적인 HTML 규칙과 같이) 다중 폼의 사용이 가능한 것이다.

 

그리고 MVC에서는 폼 입력에 대한 유효성 체크와 유효성 메시지 노출을 자동화 시켜 주는 편리한 기능도 있다

 

그런데 이 둘(다중 폼 & 유효성 체크)을 조합해서 사용하다 보면, 의도치 않는 결과를 만나곤 한다

예를들어, 다중 폼 환경에서 특정 하나의 폼의 유효성 체크가 다른 폼의 유효성 체크와 통합되어 표시되는 현상 같은 것이다.

 

두 개의 폼의 입력 필드 이름을 다르게 해서 각각의 입력 컨트롤의 유효성 실패 표시는 쉽게 구분할 수 있으나

@Html.ValidationSummary와 같은 유효성 메시지를 각 폼에 독립적으로 사용하고자 할 때는 기대처럼 동작하지 않는다. (파샬뷰로 분리된 다중 폼이라고 해도 결국 하나로 합쳐지기 때문에 현상은 동일하다)

 

이에 대한 솔루션을 제공하는 아티클이 있다

 

ASP.Net MVC: Validation a on page with multiple forms

 

간단하게 설명하자면,

필드 이름을 폼 마다 (접두어를 두어) 구분하고, 사용자 정의 HtmlHelper를 만들어서 자신의 이름과 일치하는 폼에 대해서만 유효성 체크 Summary(ValidationSummary)를 반환하도록 한 것이다. 그리고 뷰에서는 이 사용자 정의 HtmlHelper를 통해 유효성 메시지를 표시하도록 한다.

 

이러한 접근 방식이 마음에 들지 않는다면, 다음과 같이 설계 할 수 있겠다

 

1) 다중 폼을 사용하지 않기

2) 다중 폼을 사용하되, MVC 유효성 체크에 의존하지 않기

3) 위 아티클의 방식을 나름 응용해서 사용하기

(입력 폼에 자동 모델 바인딩을 사용할 경우, 입력 필드 이름에 의존적이기 때문에 필드 이름을 변경하는 게 불편할 수도 있다)

'.NET Framework' 카테고리의 다른 글

WCF Data Service VS ASP.NET Web API  (2) 2013.01.08
LING to SQL에서 다중 결과 셋 받기  (0) 2012.11.13
Razor 구문  (0) 2011.07.19
ASP.NET Razor  (5) 2010.12.13
웹 리소스 요청 막기, HttpNotFoundHandler  (0) 2010.08.09