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 控件允许您用自定义的验证逻辑创建验证控件。 例如,可以创建一个验证控件,该控件检查在文本框中输入的值是否为偶数。

验证控件总是在服务器上执行验证检查。 它们还具有完整的客户端实现,该实现允许支持 DHTML 的浏览器(如 Microsoft Internet Explorer 4.0 或更高版本)在客户端执行验证。 客户端验证通过在向服务器发送用户输入前检查用户输入来增强验证过程。 这使得在提交窗体前即可在客户端检测到错误,从而避免了服务器端验证所需要的信息的来回传递。

若要创建服务器端验证函数,请为执行验证的 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

其他资源

验证服务器控件语法