Programming/.NET
RequestFieldValidator 는 유효성검사 컨트롤중 하나로서 특정값의 입력여부를 확인하는 컨트롤입니다.
<asp:Label ID="Label1" runat="server" Text="이름 : "></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="확인" />
위 예제는 사용자로 부터 이름값을 입력받는 것인데 여기에 RequestFieldValidator 컨트롤을 사용하여 사용자가 아무것도 입력하지 않고 버튼을 누르는 경우 경고메세지가 나오도록 하려면
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="*" ForeColor="Red" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
위에서 처럼 원하는 위치에 RequestFieldValidator 를 배치하고 ControlToValidate 속성에 입력을 확인할 컨트롤을 지정합니다. 실제 위 예제에서는 사용자가 아무것도 입력하지 않고 '확인'버튼을 클릭하는 경우 붉은색(ForeColor) * 문자(ErrorMessage)를 표시해 해당 필드에 값이 입력되어야 함을 알려주고 있습니다.

만약 입력되어야할 TextBox와 같은 컨트롤이 다수가 존재할때 사용자에게 어떤 필드를 입력해야 하는지 알려주려면 해당 유효성검사 컨트롤에 SetFocusOnError 속성을 true 로 설정합니다. 그러면 유효성검사를 통과하지 못한 경우 ControlToValidate 로 지정된 컨트롤에 포커스를 자동으로 잡아주게 됩니다.

사실 유효성검사는 컨트롤에 의해 추가된 자바스크립트를 통해 이루어 지는데 자바스크립트를 후회할 경우를 대비하여 서버측에서 페이지의 IsValid 속성(Page.IsValid)의 값을 확인할 필요가 있습니다. 이 값이 true이면 휴효성검사가 통과되었음을 의미합니다.
 
참고로 버튼을 클릭하면 자동적으로 유효성 검사가 처리되는데 그 이유는 버튼에 CausesValidation 속성이 기본적으로 true로 설정되어 있기 때문입니다.

RequestFieldValidator 컨트롤을 사용하면 사용자에게 미리 특정 내용을 제시하고 해당 내용을 변경하도록 유도할 수도 있습니다.
<asp:TextBox ID="TextBox1" runat="server" Text="이름을 입력하세요."></asp:TextBox><asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" InitialValue="이름을 입력하세요." ErrorMessage="*" ForeColor="Red" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
TextBox 의 Text 와 RequestFieldValidator 의 InitialValue 속성에 같은 내용이 지정되었는데 이렇게 하면 사용자는 반드시 TextBox 에 미리지정된 내용을 다른 내용으로 수정해야만 유효성검사를 통과할 수 있게 됩니다.

이 방법은 다른 컨트롤에도 적용될 수 있는데 특히 DropDownList 의 경우에는 다음과 같이 적용할 수 있습니다.
<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Selected="True">원하는 이동수단을 선택하세요.</asp:ListItem>
    <asp:ListItem>자동차</asp:ListItem>
    <asp:ListItem>기차</asp:ListItem>
    <asp:ListItem>배</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" InitialValue="원하는 이동수단을 선택하세요." ErrorMessage="*" ForeColor="Red" ControlToValidate="DropDownList1"></asp:RequiredFieldValidator>
DropDownList 의 기본선택값으로 '원하는 이동수단을 선택하세요.'를 지정하고 RequestFieldValidator 의 InitialValue 에 같은 내용을 설정합니다.

이렇게 하면 사용자가 DropDownList 의 선택항목을 바꾸지 않는이상 유효성 검사는 통과되지 않을 것입니다.

다만 주의해야할 점이 있는데 특히 TextBox 컨트롤을 사용한 예제와 같은 경우 단지 '이름을 입력하세요.'라는 내용만 바꾸면 될 뿐이므로 빈값이 입력될때는 유효성검사를 통과할 수 있다는 것입니다.

빈값은 결과적으로 '이름을 입력하세요.' 라는 내용을 바꾼것에 해당하므로 논리적으로는 문제가 없는것입니다. 따라서 빈값과 초기값변경에 대한 유효성 검사를 동시에 진행하려면 RequestFieldValidator 를 하나더 만들어 빈값에 대응하도록 하는 유효성검사를 추가해야 합니다.

참고로 하나 더 말씀드리면 RequestFieldValidator 컨트롤을 사용할때 '확인'버튼 등에서 OnClientClick 으로 javascript 를 먼저 호출하는 경우 RequestFieldValidator 컨트롤이 제대로 작동하지 않는 경우가 생길 수 있습니다.

RequestFieldValidator 오류도 사실 javascript 단에서 처리되는 것인데 OnClientClick 에서 이를 가려버리기 때문입니다. 따라서 OnClientClick 을 사용하는 경우 반드시 Validator 컨트롤의 스크립트가 작동할 수 있게끔 Page_ClientValidate() 함수를 호출하여 주십시오.

예를 들어 '확인'버튼등에 OnClientClick="return check_confirm();" 속성이 설정되어 있는 경우 check_confirm 스크립트는 다음과 같이 처리되어야 합니다.
var check_confirm = function () {
    if (Page_ClientValidate()) {
        //유효성 검사 컨트롤의 조건이 만족하는 경우의 처리
    }
}

만약 다수의 Validator 컨트롤을 사용하는 경우 모든 값이 정상적으로 들어갔다고 판단됨에도 불구하고 유효성 조건을 만족하지 못하는 상황이 발생한다면 어느 Validator 컨트롤에서 false가 유지되고 있는지를 확인하고 적절한 조치를 취해야 합니다.

foreach (BaseValidator validator in Page.Validators) {
    if (validator.Enabled && !validator.IsValid) {
        string clientID = validator.ClientID;
        Response.Write(clientID);
        return;
    }
}

'Programming > .NET' 카테고리의 다른 글

[ASP.NET] HtmlGenericControl  (0) 2014.02.10
[ASP.NET] HiddenField  (0) 2014.02.06
[ASP.NET] RequestFieldValidator  (0) 2014.02.05
[ASP.NET] MultiView 와 View  (0) 2014.02.04
[ASP.NET] Global.aspx  (0) 2014.02.03
[ASP.NET] Chart  (0) 2014.01.27
0 0