当前位置:首页>>在线学习>>net培训

验证控件

繁简对译:[]  字体设置:[] 2008-10-08  作者:ocean  阅读  次

第四章

验证控件

课程目标

q      数据验证的方法

q      验证控件的分类

q      RequiredFieldValidator控件

q      CompareValidator控件

q      RangeValidator控件

q      RegularExpressionValidator控件

q      CustomValidator控件

q      ValidationSummary控件

q      分组校验技术

体验项目——<用户注册信息的验证 >

    本程序实现用户的注册,涉及到注册用户的方方面面的信息,为了保证录入信息的正确性,通过验证控件,对部分输入信息进行了验证。

认识验证控件

q为了保证应用程序运行的安全性和数据的有效性,要经常检查用户输入的信息是否有效。

qASP.NET提供了一组验证控件,用于提供一种易用但功能强大的检错方式,并在必要时向用户显示错误信息。

验证窗体输入控件

q验证控件可用于HTMLWeb服务器控件的有限子集。

q对于每个控件,特定属性包含了要验证的值。下表列出了可以提供验证功能的输入控件。

验证控件的类型

ASP.NET共有六种验证控件

各验证控件的使用方法

q各个控件虽然作用不同,但使用的方法却有很多共同点,因为它们都继承于共同的基类BaseValidator。比如每个控件都有一个ControlToValidate属性,必须用它来指定被验证的控件。下面分别介绍各验证控件的使用方法。

RequiredFieldValidator控件5-1

q  RequiredFieldValidator控件用于对一些必须输入的信息进行检验,如果一些必须输入的数据没有输入时,将提示错误。

q  使用这个控件的方法比较简单,将控件拖入窗体以后,关键是给它设置以下4个属性:

     (1)     ControlToValidate:设置被验证的控件,可以在本属性的下拉列表中选择。

     (2)     ErrorMessage:当不能通过验证时显示的错误信息。

     (3)     Display:显示错误信息的位置,包括以下3种选择。

       None:不显示错误信息。

       Static:显示在设计时控件所放置的位置。

       Dynamic:将错误信息动态显示在页面上。

     (4)     EnableClientScript:本属性为逻辑变量,默认为true,表示如有可能(例如浏览器版本为Internet Explorer 4.0以上),先在客户端验证。若将本属性值改为false,将不在客户端进行验证。

RequiredFieldValidator控件5-2

RequiredFieldValidator控件使用标准代码:

ASP:RequiredFieldValidator id="Validator_Name"       Runat="server  

       ControlToValidate="要检查的控件名"

       ErrorMessage="出错信息"

       Display="Static|Dymatic|None"

       占位符

/ASP: RequiredFieldValidator

RequiredFieldValidator控件 5-3

此控件用于检查任何窗体控件中是否包含值

如果控件中不含任何值,则会生成错误消息

RequiredFieldValidator控件 5-4

RequiredFieldValidator控件 5-5

CompareValidator 控件 4-1

q   CompareValidator 控件用来将输入到控件(例如TextBox控件)的值与输入到其他控件的值或常数值进行比较。几个重要的属性的设置方法如下。

(1)通过设置ControlToValidate 属性指定被验证的输入控件。

(2)如果要将输入控件与其他输入控件进行比较,将 ControlToCompare 属性设置为要与之相比较的控件。如果要将输入控件的值与某个常数值进行比较时,应将ValueToCompare 属性设置为与之比较的常数。

(3)类型(Type)属性用于设置比较数据的类型。只有在同一类型的数据之间才能够进行比较。

(4)操作符(Operator)属性用来指定比较的方法,如大于、等于等。如果将Operator属性设置为DataTypeCheck,则CompareValidator控件将忽略 ControlToCompare ValueToCompare属性,并且仅仅指示输入到输入控件中的值是否可以转换为类型(Type)属性指定的数据类型。

CompareValidator 控件 4-2

CompareValidator 控件 4-3

CompareValidator 控件 4-4

RangeValidator控件 21

 

 

RangeValidator控件 21

 

 

正则表达式 2-1

q 正则表达式用于进行类型匹配

q 正则表达式可使用文字文本逐字匹配

q 它还可以使用元字符与复杂的字符序列相匹配

q 以下为几种常用的符号(更多的参见书本拓展部分)

正则表达式 2-2

RegularExpressionValidator 控件

q   控件RegularExpressionValidator控件用来验证输入的格式是否匹配某种特定的模式(正则表达式)。这类验证允许检查一些可以预知的字符序列,比如身份证号码、电子邮件地址、电话号码和邮编中的字符序列等。

q   除非浏览器不支持客户端验证,或者已明确禁止客户端验证(通过将 EnableClientScript 属性设置为 false),否则将同时执行服务器端和客户端验证。

q   客户端的正则表达式验证实现和服务器端的略有不同。在客户端,使用的是JScript 正则表达式语法。而在服务器端,使用的则是System.Text.RegularExpressions.Regex语法。由于 JScript 正则表达式语法是System.Text.RegularExpressions.Regex 语法的子集,所以最好使用 JScript 正则表达式语法,以便在客户端和服务器端得到同样的结果。

q   使用本控件进行校验时,除按照前面几个控件设置属性以外,最主要的区别是将控件的ValidationExpress属性设置检查模式。方法是单击属性右边的省略号按钮,在弹出的对话框中选择标准表达式,弹出的对话框如图所示。

q   然后选择需要检查的模式即可。

RegularExpressionValidator 控件示例

下例判断使用的邮件地址是否正确:

      <asp:TextBox ID="txtMail" runat="server">

      </asp:TextBox>

      <asp:RegularExpressionValidator

         ID="RegularExpressionValidator1" runat="server"

         ControlToValidate="txtMail"

         ErrorMessage="输入邮件格式不正确"

         ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" >

      </asp:RegularExpressionValidator>

      <br />

      <asp:Button ID="Button3" runat="server" Text="Button" />

ValidationSummary控件

q  ValidationSummary控件用于在一个位置上集中显示来自 Web 网页上所有验证程序的错误信息。根据DisplayMode属性的设置,可以采用列表、项目符号列表或单个段落的形式来显示。通过设置控件的ShowSummary ShowMessageBox 属性,可以确定显示的形式。

ValidationSummary 控件 2-1

显示窗体中生成的所有错误的摘要

摘要可以按多种模式显示:列表、项目列表或单独一段

 

ValidationSummary 控件 2-2

自定义验证控件

q    使用自定义控件(CustomValidator)时,可以自行定义验证算法,并同时利用控件提供的其他功能。

q    为了在服务器端验证函数,先将CustomValidator控件拖入窗体,并将ControlToValidate属性指向被验证的对象,然后给该验证控件的 ServerValidate 事件提供一个验证程序,最后在ErrorMessage属性中填写出现错误时显示的信息。

q    ServerValidate 事件处理程序中,可以从ServerValidateEventArgs 参数的 Value 属性中获取输入到被验证控件中的字符串。验证的结果要存储到 ServerValidateEventArgs 的属性 IsValid (true或者false)中。

q    例如,我们利用自定义CustomValidator控件验证某个输入框输入的数据能否被3整除。若不能被3整除时发出错误信息。事件处理的代码如下:

private void CustomValidator1_ServerValidate(object source,

                   System.Web.UI.WebControls.ServerValidateEventArgs args)

      {

         int number=int.Parse(args.Value);  // 取出输入的数据

         if((number % 3) == 0)                          // 校验能否被3整除

                   args.IsValid=true;                       // 结果正确

           else

                   args.IsValid=false;             // 结果错误

      }

q    如果需要同时提供客户端验证程序以便让具有DHTML能力的浏览器先进行验证时,应该在.aspxHTML视图中用JavaScript语言编写验证程序,同时将验证的函数名写入控件的ClientValidationFunction属性中。

分组校验技术3-1

q   在一个网页中通常会出现几个独立的输入部分,它们的作用不同,验证的时机也不相同,应该分别进行验证。例如,网页中既包括用于查询记录的输入部分,又包括用户认证部分,就属于这种情况。在HTML网页中可以设置多个表单,将这些输入控件分别放在不同的表单中,以便单独进行校验和提交数据。但是在ASPX网页中,每个网页就是一个运行在服务器的表单。表单的定义如下:

      <form id = form1 runat = "server">

        

      </form>

q   分组校验是ASP.NET 2.0版本才提出来的新技术,用来解决在ASPX网页中多组不同输入的校验问题。它要求利用各个控件的ValidationGroup属性给这些控件进行分组。

 

现在用一个简单的示例来说明分组校验的方法。假定有两组输入控件,各包括一个输入框(TextBox)和一个按钮(Button),并且分别放入了校验控件。为了进行分组,将其中一组的输入框、按钮和校验控件的ValidationGroup属性设置为Group1,而将另一组控件的ValidationGroup属性设为Group2。控件的布局如图9.3所示。

分组校验技术 3-2

对应的代码如下:

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

    <div>

      <table border="1" style="width: 680px; height: 88px">

         <tr>

         <td colspan="3">

          第一组校验控件:</td>

         </tr>

         <tr>

            <td style="width: 62px">

               <asp:TextBox ID="TextBox1" runat="server"

                 ValidationGroup="Group1">

               </asp:TextBox> </td>

            <td style="width: 100px">

               <asp:Button ID="Button1" runat="server" Text="Button1"

                  ValidationGroup="Group1" /> </td>

            <td style="width: 100px">

               <asp:RequiredFieldValidator ID="RequiredFieldValidator1"

                 runat="server" ErrorMessage="RequiredFieldValidator"

                 ValidationGroup="Group1">

                 </asp:RequiredFieldValidator> </td>

         </tr>

         <tr> <td colspan="3"> 第二组校验控件:</td> </tr>

        

分组校验技术 3-3

<tr> <td style="width: 62px">

               <asp:TextBox ID="TextBox2" runat="server"

                  ValidationGroup="Group2">

               </asp:TextBox>

            </td>

            <td style="width: 100px">

               <asp:Button ID="Button2" runat="server" Text="Button2"

                   ValidationGroup="Group2" />

            </td>

            <td style="width: 100px">

               <asp:RequiredFieldValidator ID="RequiredFieldValidator2"

                  runat="server"

                  ErrorMessage="RequiredFieldValidator"

                  ValidationGroup="Group2">

                  </asp:RequiredFieldValidator>

             </td>

          </tr>

        </table>

     </div>

</form>

为了简化分组方法,可以一手按住Shift键,另一手用鼠标单击组内各个控件,然后一起设置它们的ValidationGroup属性。

验证控件说明

q  在网站中,对输入数据进行校验是经常需要使用的技术。在ASP.NET中,校验工作都是在服务器端进行。在可能的情况下,将自动调用客户端校验作为一种补充,以减少错误信息在网络上的往返次数,提高处理的效率。

q  各种校验控件虽然作用不同,但是使用的方法却有很多共同点,都需要将属性指向被校验的控件,指定错误发生时提示的语句,其他属性的设置则根据控件的作用不同而有所不同。在这些控件中除RequiredFieldValidator以外,其他控件都认为空的输入是允许的。因此有时需要将RequiredFieldValidator控件与其他控件一起指向输入控件时,才能避免输入错误的发生。

q  由于每个ASPX网页中只有一个表单。而同一个网页中却可能存在着多组独立的验证控件,此时可以利用ASP.NET 2.0提供的分组校验技术将这些校验控件进行分组,以便让它们在不同的时机完成自己独立的校验工作。

本章总结

q      数据验证的方法

q      验证控件的分类

q      RequiredFieldValidator控件

q      CompareValidator控件

q      RangeValidator控件

q      RegularExpressionValidator控件

q      CustomValidator控件

q      ValidationSummary控件

q      分组校验技术

 

打印 收藏 关闭