Validation服务器控件:CustomValidator控件

2009-03-15 01:36:31  来源:网页教学网 

WebjxCom提示:CustomValidator 控件可对输入控件执行用户定义的验证。

阅读此文请先查看网页教学网的:ASP.NET入门教程:Validation服务器控件,简单讲述了Web服务器控件的使用方法。

定义和用法

CustomValidator 控件可对输入控件执行用户定义的验证。计算输入控件的值以确定它是否通过自定义的验证逻辑。

属性

属性 描述
BackColor CustomValidator 控件的背景颜色。
ClientValidationFunction

规定用于验证的自定义客户端脚本函数的名称。

注释:脚本必须用浏览器支持的语言编写,比如 VBScript 或 JScript

使用 VBScript 的话,函数必须位于表单中:

Sub FunctionName (source, arguments)

使用 JScript 的话,函数必须位于表单中:

Function FunctionName (source, arguments)

ControlToValidate 要验证的输入控件的 id。
Display

验证控件中错误信息的显示行为。

合法的值有:

  • None - 验证消息从不内联显示。
  • Static - 在页面布局中分配用于显示验证消息的空间。
  • Dynamic - 如果验证失败,将用于显示验证消息的空间动态添加到页面。
EnableClientScript 布尔值,该值指示是否启用客户端验证。
Enabled 布尔值,该值指示是否启用验证控件。
ErrorMessage

验证失败时 ValidationSummary 控件中显示的错误信息的文本。

注释:如果设置了 ErrorMessage 属性但没有设置 Text 属性,则验证控件中也将显示 ErrorMessage 属性的值。

ForeColor 控件的前景色。
id 控件的唯一 id。
IsValid 布尔值,该值指示关联的输入控件是否通过验证。
OnServerValidate 规定被执行的服务器端验证脚本函数的名称。
runat 规定该控件是服务器控件。必须设置为 "server"。
Text 当验证失败时显示的文本。

实例

<asp:CustomValidator
    AccessKey="string"
    AssociatedControlID="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 控件)时,通常这样做。在这种情况下,arguments 参数(该参数传递给 ServerValidate 事件的事件处理程序并传递给客户端验证函数)的 Value 属性总是包含一个空字符串 ("")。但是,仍在适当的位置调用这些验证函数,以确定服务器和客户端上的有效性。若要访问要验证的值,必须以编程方式引用要验证的输入控件,然后从适当的属性中检索该值。例如,若要在服务器上验证 CheckBox 控件,请不要设置验证控件的 ControlToValidate 属性,并且为 ServerValidate 事件的处理程序使用以下代码:

Visual Basic

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

C#

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

示例

下面的代码示例演示如何创建一个用于在服务器上验证在文本框中输入的值是否为偶数的 CustomValidator 控件。验证结果随后显示在页上。

Visual Basic

<%@ 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>

C#

<%@ 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 控件,该控件执行的验证例程与上例相同,但执行位置是在客户端上。

Visual Basic

<%@ 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>

C#

<%@ 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>

更多

推荐文章