다음을 통해 공유


CustomValidator 컨트롤(일반 참조)

[이 설명서는 미리 보기 전용이며, 이후 릴리스에서 변경될 수 있습니다. 비어 있는 항목은 자리 표시자로 포함됩니다.]

입력 컨트롤의 값을 평가하여 사용자 지정 유효성 검사 논리를 전달하는지 여부를 확인합니다.

<asp:CustomValidator
    AccessKey="string"
    BackColor="color name|#dddddd"
    BorderColor="color name|#dddddd"
    BorderStyle="NotSet|None|Dotted|Dashed|Solid|Double|Groove|Ridge|
        Inset|Outset"
    BorderWidth="size"
    ClientValidationFunction="string"
    ControlToValidate="string"
    CssClass="string"
    Display="None|Static|Dynamic"
    EnableClientScript="True|False"
    Enabled="True|False"
    EnableTheming="True|False"
    EnableViewState="True|False"
    ErrorMessage="string"
    Font-Bold="True|False"
    Font-Italic="True|False"
    Font-Names="string"
    Font-Overline="True|False"
    Font-Size="string|Smaller|Larger|XX-Small|X-Small|Small|Medium|
        Large|X-Large|XX-Large"
    Font-Strikeout="True|False"
    Font-Underline="True|False"
    ForeColor="color name|#dddddd"
    Height="size"
    ID="string"
    OnDataBinding="DataBinding event handler"
    OnDisposed="Disposed event handler"
    OnInit="Init event handler"
    OnLoad="Load event handler"
    OnPreRender="PreRender event handler"
    OnServerValidate="ServerValidate event handler"
    OnUnload="Unload event handler"
    runat="server"
    SetFocusOnError="True|False"
    SkinID="string"
    Style="string"
    TabIndex="integer"
    Text="string"
    ToolTip="string"
    ValidateEmptyText="True|False"
    ValidationGroup="string"
    Visible="True|False"
    Width="size"
/>

설명

CustomValidator 컨트롤을 사용하면 사용자 지정된 유효성 검사 논리를 사용하는 유효성 검사 컨트롤을 만들 수 있습니다. 예를 들면 텍스트 상자에 입력한 값이 짝수인지 확인하는 유효성 검사 컨트롤을 만들 수 있습니다.

유효성 검사 컨트롤은 항상 서버에서 유효성을 검사합니다. Microsoft Internet Explorer 4.0 이상과 같이 DHTML을 지원하는 브라우저를 사용하여 클라이언트에서 유효성을 검사할 수 있는 완전한 클라이언트측 구현도 있습니다. 클라이언트측 유효성 검사는 사용자 입력을 서버에 보내기 전에 실행되기 때문에 유효성 검사 프로세스가 향상됩니다. 이 방법을 사용하면 폼을 전송하기 전에 클라이언트에서 오류가 검색되므로 정보를 불필요하게 서버로 보내어 서버측에서 유효성을 검사할 필요가 없어집니다.

서버측 유효성 검사 함수를 만들려면 유효성 검사를 수행하는 ServerValidate 이벤트에 대한 처리기를 제공합니다. 유효성을 검사할 입력 컨트롤의 문자열에는 이벤트 처리기에 매개 변수로 전달되는 ServerValidateEventArgs 개체의 Value 속성을 사용하여 액세스할 수 있습니다. 그런 다음 유효성 검사의 결과를 ServerValidateEventArgs 개체의 IsValid 속성에 저장합니다.

클라이언트쪽 유효성 검사 함수를 만들려면 먼저 앞에서 설명한 서버측 유효성 검사 함수를 추가합니다. 그런 다음 클라이언트측 유효성 검사 스크립트 함수를 .aspx 페이지에 추가합니다.

Visual Basic을 사용하는 경우에는 함수의 형식이 다음과 같아야 합니다.

Sub ValidationFunctionName (source, arguments)

JScript를 사용하는 경우에는 함수의 형식이 다음과 같아야 합니다.

Function ValidationFunctionName (source, arguments)

ClientValidationFunction 속성을 사용하여 CustomValidator 컨트롤과 관련된 클라이언트측 유효성 검사 스크립트 함수의 이름을 지정합니다. 스크립트 함수는 클라이언트에서 실행되므로 Visual Basic이나 JScript처럼 대상 브라우저에서 지원하는 언어로 작성해야 합니다.

서버측 유효성 검사와 마찬가지로 arguments 매개 변수의 Value 속성을 사용하여 유효성 검사 대상 값에 액세스합니다. arguments 매개 변수의 IsValid 속성을 설정하여 유효성 검사 결과를 반환합니다.

보안 정보보안 정보

클라이언트측 유효성 검사 함수를 만들 때는 서버측 유효성 검사 함수의 기능을 포함해야 합니다.상응하는 서버측 함수가 없이 클라이언트측 유효성 검사 함수를 만들면 악의적인 코드가 유효성 검사를 받지 않고 통과할 수도 있습니다.

여러 개의 유효성 검사 컨트롤을 개별 입력 컨트롤과 연결하여 서로 다른 기준에 따라 유효성을 검사할 수 있습니다. 예를 들어, 사용자가 장바구니에 추가할 항목의 수량을 입력할 수 있도록 하는 TextBox 컨트롤에 여러 가지 유효성 검사 컨트롤을 적용할 수 있습니다. CustomValidator 컨트롤을 사용하여 지정한 값이 인벤터리에 있는 해당 크기보다 적은지 확인하고, RequiredFieldValidator 컨트롤을 사용하여 사용자가 TextBox 컨트롤에 값을 입력했는지를 확인합니다.

참고

입력 컨트롤이 비어 있으면 유효성 검사 함수가 호출되지 않으며 유효성 검사를 통과한 것으로 평가됩니다.사용자가 입력 컨트롤에 반드시 내용을 입력하게 하려면 RequiredFieldValidator 컨트롤을 사용합니다.

ControlToValidate 속성을 설정하지 않고도 CustomValidator 컨트롤을 사용할 수 있는데, 이 방법은 여러 입력 컨트롤의 유효성을 검사하거나 CheckBox 컨트롤과 같이, 유효성 검사 컨트롤과 함께 사용될 수 없는 입력 컨트롤의 유효성을 검사하는 경우에 일반적으로 사용됩니다. 이 경우, ServerValidate 이벤트에 대해 이벤트 처리기 및 클라이언트쪽 유효성 검사 함수에 전달되는 arguments 매개 변수의 Value 속성에는 빈 문자열("")이 항상 들어 있습니다. 그러나 적절한 경우에 이러한 유효성 검사 함수를 호출하여 서버와 클라이언트 모두에서 유효성을 확인할 수 있습니다. 유효성을 검사할 값에 액세스하기 위해서는 먼저 유효성을 검사할 입력 컨트롤을 프로그래밍 방식으로 참조한 다음 해당 속성에서 값을 검색해야 합니다. 예를 들어, 서버의 CheckBox 컨트롤의 유효성을 검사하려면 유효성 검사 컨트롤의 ControlToValidate 속성을 설정하지 않고, ServerValidate 이벤트의 처리기에 다음 코드를 사용합니다.

Sub ServerValidation (source As object, args As ServerValidateEventArgs)
 
   args.IsValid = (CheckBox1.Checked = True)

End Sub
void ServerValidation (object source, ServerValidateEventArgs args)
{
      
   args.IsValid = (CheckBox1.Checked == true);
   
}

CustomValidator 컨트롤에 대한 자세한 내용은 System.Web.UI.WebControls.CustomValidator 클래스를 참조하십시오.

예제

다음 코드 예제에서는 서버에서 텍스트 상자에 입력된 값이 짝수인지 확인하는 CustomValidator 컨트롤을 만드는 방법을 보여 줍니다. 유효성 검사 결과가 페이지에 표시됩니다.

보안 정보보안 정보

이 코드 예제에는 사용자 입력을 허용하는 텍스트 상자가 있으므로 보안상 위험할 수 있습니다.기본적으로 ASP.NET 웹 페이지에서는 사용자 입력 내용에 스크립트나 HTML 요소가 포함되어 있지 않은지 확인합니다.자세한 내용은 Script Exploits Overview를 참조하십시오.

<%@ Page Language="VB" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      Sub ValidateBtn_OnClick(sender As object, e As EventArgs) 
         If Page.IsValid Then 
            lblOutput.Text = "Page is valid."
         Else 
            lblOutput.Text = "Page is not valid!"
         End If
      End Sub
      Sub ServerValidation (source As object, arguments As ServerValidateEventArgs)

         Dim num As Integer = Integer.Parse(arguments.Value)
         arguments.IsValid = ((num mod 2) = 0)
         
      End Sub
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           OnServerValidate="ServerValidation"
           Display="Static"
           ErrorMessage="Not an even number!"
           ForeColor="green"
           Font-Name="verdana" 
           Font-Size="10pt"
           runat="server"/>
      <p />
      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>
   </form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      void ValidateBtn_OnClick(object sender, EventArgs e) 
      { 
         if (Page.IsValid) 
         {
            lblOutput.Text = "Page is valid.";
         }
         else 
         {
            lblOutput.Text = "Page is not valid!";
         }
      }
      void ServerValidation (object source, ServerValidateEventArgs arguments)
      {

         int i = int.Parse(arguments.Value);
         arguments.IsValid = ((i%2) == 0);

      }
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           OnServerValidate="ServerValidation"
           Display="Static"
           ErrorMessage="Not an even number!"
           ForeColor="green"
           Font-Name="verdana" 
           Font-Size="10pt"
           runat="server"/>
      <p />
      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>
   </form>
</body>
</html>

다음 코드 예제에서는 클라이언트에서 위의 예제와 동일한 유효성 검사를 수행하는 CustomValidator 컨트롤을 만드는 방법을 보여 줍니다.

<%@ Page Language="VB" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      Sub ValidateBtn_OnClick(sender As object, e As EventArgs) 
         If Page.IsValid Then 
            lblOutput.Text = "Page is valid."
         Else 
            lblOutput.Text = "Page is not valid!"
         End If
      End Sub
      Sub ServerValidation (source As object, arguments As ServerValidateEventArgs)

         Dim num As Integer = Integer.Parse(arguments.Value)
         arguments.IsValid = ((num mod 2) = 0)
 
      End Sub
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           ClientValidationFunction="ClientValidate"
           OnServerValidate="ServerValidation"
           Display="Static"
           ErrorMessage="Not an even number!"
           ForeColor="green"
           Font-Name="verdana" 
           Font-Size="10pt"
           runat="server"/>
      <p />
      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>
   </form>
</body>
</html>
<script language="javascript">
   <!--
   function ClientValidate(source, arguments)
   {
      if ((arguments.Value % 2) == 0)
         arguments.IsValid=true;
      else
         arguments.IsValid=false;
   }
   // -->
</script>
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      void ValidateBtn_OnClick(object sender, EventArgs e) 
      { 
         if (Page.IsValid) 
         {
            lblOutput.Text = "Page is valid.";
         }
         else 
         {
            lblOutput.Text = "Page is not valid!";
         }
      }
      void ServerValidation (object source, ServerValidateEventArgs arguments)
      {
         
            int i = int.Parse(arguments.Value);
            arguments.IsValid = ((i%2) == 0);

      }
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           ClientValidationFunction="ClientValidate"
           OnServerValidate="ServerValidation"
           Display="Static"
           ErrorMessage="Not an even number!"
           ForeColor="green"
           Font-Name="verdana" 
           Font-Size="10pt"
           runat="server"/>
      <p />
      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>
   </form>
</body>
</html>
<script language="javascript">
   <!--
   function ClientValidate(source, arguments)
   {
      if ((arguments.Value % 2) == 0)
         arguments.IsValid=true;
      else
         arguments.IsValid=false;
   }
   // -->
</script>

참고 항목

참조

CustomValidator

기타 리소스

유효성 검사 서버 컨트롤 구문