当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > Validation服务器控件:CustomValidator控件

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

ASP.NET 中的 Validation服务器控件:CustomValidator控件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 246 ::
收藏到网摘: n/a

阅读此文请先查看软晨学习网的: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>