Asp.net 简明教程

ASP.NET - Validators

ASP.NET 验证控件验证用户输入数据,以确保不会存储无用、未经身份验证或矛盾的数据。

ASP.NET 提供以下验证控件:

  1. RequiredFieldValidator

  2. RangeValidator

  3. CompareValidator

  4. RegularExpressionValidator

  5. CustomValidator

  6. ValidationSummary

BaseValidator Class

验证控件类继承自 BaseValidator 类,因此继承了它的属性和方法。因此,了解这个所有验证控件共有的基类的属性和方法会有帮助:

Members

Description

ControlToValidate

指示要验证的输入控件。

Display

指示如何显示错误消息。

EnableClientScript

指示是否进行客户端验证。

Enabled

启用或禁用验证器。

ErrorMessage

Indicates error string.

Text

如果验证失败时要显示的错误文本。

IsValid

指示控件的值是否有效。

SetFocusOnError

指示在控件无效的情况下,焦点是否应切换到相关的输入控件。

ValidationGroup

此控件所属的多个验证器的逻辑组。

Validate()

此方法重新验证控件并更新 IsValid 属性。

RequiredFieldValidator Control

RequiredFieldValidator 控件确保必填字段不为空。通常将其绑定到文本框,以强制用户在文本框中输入内容。

控件的语法如下所示:

<asp:RequiredFieldValidator ID="rfvcandidate"
   runat="server" ControlToValidate ="ddlcandidate"
   ErrorMessage="Please choose a candidate"
   InitialValue="Please choose a candidate">

</asp:RequiredFieldValidator>

RangeValidator Control

RangeValidator 控件验证输入值是否在预定范围内。

它具有三个特定属性:

Properties

Description

Type

它定义了数据的类型。可用值为:货币、日期、双精度、整数和字符串。

MinimumValue

它指定范围的最小值。

MaximumValue

它指定范围的最大值。

控件的语法如下所示:

<asp:RangeValidator ID="rvclass" runat="server" ControlToValidate="txtclass"
   ErrorMessage="Enter your class (6 - 12)" MaximumValue="12"
   MinimumValue="6" Type="Integer">

</asp:RangeValidator>

CompareValidator Control

CompareValidator 控件将一个控件中的值与另一个控件中的固定值或值进行比较。

它具有下列特定属性:

Properties

Description

Type

它指定数据类型。

ControlToCompare

它指定要与其进行比较的输入控件的值。

ValueToCompare

它指定要与其进行比较的常量值。

Operator

它指定比较运算符,可用值为:等于、不等于、大于、大于等于、小于、小于等于和 DataTypeCheck。

该控件的基本语法如下:

<asp:CompareValidator ID="CompareValidator1" runat="server"
   ErrorMessage="CompareValidator">

</asp:CompareValidator>

RegularExpressionValidator

RegularExpressionValidator 允许通过与正则表达式的模式匹配来验证输入文本。正则表达式在 ValidationExpression 属性中设置。

下表总结了正则表达式中常用的语法结构:

Character Escapes

Description

\b

Matches a backspace.

\t

Matches a tab.

\r

Matches a carriage return.

\v

Matches a vertical tab.

\f

Matches a form feed.

\n

Matches a new line.

除了匹配单个字符,还可以指定一类可以匹配的字符,称为元字符。

Metacharacters

Description

.

匹配除 \n 之外的任何字符。

[abcd]

匹配集合中的任何字符。

[^abcd]

排除集合中的任何字符。

[2-7a-mA-M]

匹配范围内指定的任何字符。

\w

匹配任何字母数字字符和下划线。

\W

Matches any non-word character.

\s

匹配空格字符,如空格、制表符、换行符等。

\S

Matches any non-whitespace character.

\d

Matches any decimal character.

\D

Matches any non-decimal character.

可以通过量词来指定字符可能出现的次数。

Quantifier

Description

*

Zero or more matches.

+

One or more matches.

?

Zero or one matches.

{N}

N matches.

{N,}

N or more matches.

{N,M}

在 N 和 M 次匹配之间。

控件的语法如下所示:

<asp:RegularExpressionValidator ID="string" runat="server" ErrorMessage="string"
   ValidationExpression="string" ValidationGroup="string">

</asp:RegularExpressionValidator>

CustomValidator

CustomValidator 控件允许为客户端和服务器端验证编写应用程序特有的自定义验证例程。

通过 ClientValidationFunction 属性来完成客户端验证。客户端验证例程应以浏览器可以理解的脚本语言(例如 JavaScript 或 VBScript)编写。

必须从控件的 ServerValidate 事件处理程序调用服务端验证例程。服务端验证例程应以任何 .Net 语言(如 C# 或 VB.Net)编写。

控件的基本语法如下:

<asp:CustomValidator ID="CustomValidator1" runat="server"
   ClientValidationFunction=.cvf_func. ErrorMessage="CustomValidator">

</asp:CustomValidator>

ValidationSummary

ValidationSummary 控件不会执行任何验证,但会显示页面中所有错误的摘要。摘要显示验证失败的所有验证控件的 ErrorMessage 属性值。

以下两个互斥的属性列出错误消息:

  1. ShowSummary :以指定格式显示错误消息。

  2. ShowMessageBox :在单独窗口中显示错误消息。

控件的语法如下:

<asp:ValidationSummary ID="ValidationSummary1" runat="server"
   DisplayMode = "BulletList" ShowSummary = "true" HeaderText="Errors:" />

Validation Groups

复杂的页面在不同的面板中提供不同组的信息。在这种情况下,可能需要分别对不同的组执行验证。使用验证组可以处理这种类型的状况。

若要创建验证组,应将输入控件和验证控件放入同一逻辑组,方法是设置其 ValidationGroup 属性。

Example

以下示例描述了由一所学校的全部学生填写的一份表格,这些学生划分为四个组,用于选举学校主席。在这里,我们使用验证控件来验证用户输入。

这是表单的设计视图:

form in design view

给出的内容文件代码如下:

<form id="form1" runat="server">

   <table style="width: 66%;">

      <tr>
         <td class="style1" colspan="3" align="center">
         <asp:Label ID="lblmsg"
            Text="President Election Form : Choose your president"
            runat="server" />
         </td>
      </tr>

      <tr>
         <td class="style3">
            Candidate:
         </td>

         <td class="style2">
            <asp:DropDownList ID="ddlcandidate" runat="server"  style="width:239px">
               <asp:ListItem>Please Choose a Candidate</asp:ListItem>
               <asp:ListItem>M H Kabir</asp:ListItem>
               <asp:ListItem>Steve Taylor</asp:ListItem>
               <asp:ListItem>John Abraham</asp:ListItem>
               <asp:ListItem>Venus Williams</asp:ListItem>
            </asp:DropDownList>
         </td>

         <td>
            <asp:RequiredFieldValidator ID="rfvcandidate"
               runat="server" ControlToValidate ="ddlcandidate"
               ErrorMessage="Please choose a candidate"
               InitialValue="Please choose a candidate">
            </asp:RequiredFieldValidator>
         </td>
      </tr>

      <tr>
         <td class="style3">
            House:
         </td>

         <td class="style2">
            <asp:RadioButtonList ID="rblhouse" runat="server" RepeatLayout="Flow">
               <asp:ListItem>Red</asp:ListItem>
               <asp:ListItem>Blue</asp:ListItem>
               <asp:ListItem>Yellow</asp:ListItem>
               <asp:ListItem>Green</asp:ListItem>
            </asp:RadioButtonList>
         </td>

         <td>
            <asp:RequiredFieldValidator ID="rfvhouse" runat="server"
               ControlToValidate="rblhouse" ErrorMessage="Enter your house name" >
            </asp:RequiredFieldValidator>
            <br />
         </td>
      </tr>

      <tr>
         <td class="style3">
            Class:
         </td>

         <td class="style2">
            <asp:TextBox ID="txtclass" runat="server"></asp:TextBox>
         </td>

         <td>
            <asp:RangeValidator ID="rvclass"
               runat="server" ControlToValidate="txtclass"
               ErrorMessage="Enter your class (6 - 12)" MaximumValue="12"
               MinimumValue="6" Type="Integer">
            </asp:RangeValidator>
         </td>
      </tr>

      <tr>
         <td class="style3">
            Email:
         </td>

         <td class="style2">
            <asp:TextBox ID="txtemail" runat="server" style="width:250px">
            </asp:TextBox>
         </td>

         <td>
            <asp:RegularExpressionValidator ID="remail" runat="server"
               ControlToValidate="txtemail" ErrorMessage="Enter your email"
               ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
            </asp:RegularExpressionValidator>
         </td>
      </tr>

      <tr>
         <td class="style3" align="center" colspan="3">
            <asp:Button ID="btnsubmit" runat="server" onclick="btnsubmit_Click"
               style="text-align: center" Text="Submit" style="width:140px" />
         </td>
      </tr>
   </table>
   <asp:ValidationSummary ID="ValidationSummary1" runat="server"
      DisplayMode ="BulletList" ShowSummary ="true" HeaderText="Errors:" />
</form>

提交按钮后面的代码:

protected void btnsubmit_Click(object sender, EventArgs e)
{
   if (Page.IsValid)
   {
      lblmsg.Text = "Thank You";
   }
   else
   {
      lblmsg.Text = "Fill up all the fields";
   }
}