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 |