업데이트: 2007년 11월
입력 컨트롤의 값을 평가하여 사용자 지정 유효성 검사 논리를 전달하는지 여부를 확인합니다.
<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 요소가 포함되어 있지 않은지 유효성을 검사합니다. 자세한 내용은 스크립트 악용 개요를 참조하십시오. |
<%@ 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" />
<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" />
<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" />
<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" />
<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>