ASP[1].NET_2.0动态网站开发教程第9章_第1页
ASP[1].NET_2.0动态网站开发教程第9章_第2页
ASP[1].NET_2.0动态网站开发教程第9章_第3页
ASP[1].NET_2.0动态网站开发教程第9章_第4页
ASP[1].NET_2.0动态网站开发教程第9章_第5页
已阅读5页,还剩23页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章 数 据 验 证,(时间:2次课,4学时),第9章 数 据 验 证,程序运行时,对一些输入的数据进行验证是很有必要的,因为不正确的输入很可能会给后续的应用带来麻烦。例如,某用户发来的购货订单中,遗漏了地址,你向哪里发货?不仅如此,有些错误的输入还会给系统运行造成直接的影响,轻者会降低系统的运行效率,重者可能破坏系统的正常运行。 当然,为了验证数据可以自行编写验证代码,但这样做比较麻烦。利用系统提供的验证控件,可以很方便地验证输入数据的正确性。 本章将首先介绍各个控件的验证原则、使用方法,最后用一个综合示例作为总结。具体包括以下几个问题: 概述 验证控件的类型 各验证控件的使用方法 自定义控件 分组校验方法 综合示例,第9章 数 据 验 证,9.1 概 述 9.2 验证控件的类型 9.3 各验证控件的使用方法 9.4 自定义控件 9.5 分组校验技术 9.6 综 合 示 例 9.7 小 结 9.8 习 题,9.1 概 述,验证工作最好放在客户端进行。当在客户端输入完数据,向服务器提交以前应对数据进行检测,如果发现错误,立即提示并要求改正,改正前不向服务器提交信息。这种处理方式可以将改正错误的过程放在提交以前,减少网上的无效传输。 但是有两个原因使得不能依赖客户端的验证。第一,由于相当一部分客户端的设备功能弱,不具备验证能力,此时验证工作只能放在服务器端进行;第二,恶意的用户能够比较容易地破坏客户端的验证脚本,或者想方设法绕过客户端的校验。 因此,从安全的角度出发,除非人为地取消了服务器端验证,不论客户端是否进行了验证,服务器端的验证都是不可缺少的。当用户向服务器提交数据之后,服务器都毫无例外地调用验证程序来逐个检查用户的输入。如果发现任何输入数据有错误时,整个页面将自行设置为无效状态,并发出错误信息。,9.2 验证控件的类型,系统提供了5种验证控件(包括程序设计者自行定义的控件)和一个汇总控件。各种验证控件的作用如表9.1所示。 另外还有一个ValidationSummary 汇总控件,它只能与以上控件一道使用, 不能单独执行验证。它的作用是将来自页面上所有控件的错误信息集中在一起进行显示。 所有的验证控件都继承于BaseValidator类,该类又派生于Label并实现了IValidator接口。所以所有的验证控件都继承了Label控件利用span显示的能力。另外,在BaseValidator类中还定义了“显示错误(ErrorMessage)”属性和“字符串颜色(ForColor)”属性(默认情况下为红色)。如果需要,可以改变这些属性来改变错误的提示和提示的 颜色。 在这些控件中,除RequiredFieldValidator控件以外,其他所有的控件都认为空字段是合法的。 允许将多个验证控件对某一个输入控件同时进行多方面的验证。例如可以指定某个控件既必须输入数据,同时输入的数据必须在指定的范围内。此时就可以将RequiredValidator和RangeValidator两个控件同时指向该控件。 当执行多条件验证时,验证条件之间是“逻辑与(AND)”的关系。即只有所有条件都符合要求时才能获得通过。,9.2 验证控件的类型,9.3 各验证控件的使用方法,9.3.1 RequiredFieldValidator控件 9.3.2 CompareValidator控件 9.3.3 RangeValidator控件 9.3.4 RegularExpressionValidator 控件 9.3.5 ValidationSummary控件,9.3 各验证控件的使用方法,各个控件虽然作用不同,但使用的方法却有很多共同点,因为它们都继承于共同的基类BaseValidator。比如每个控件都有一个ControlToValidate属性,必须用它来指定被验证的控件。下面分别介绍各验证控件的使用方法。,9.3.1 RequiredFieldValidator控件,RequiredFieldValidator控件用于对一些必须输入的信息进行检验,如果一些必须输入的数据没有输入时,将提示错误。 使用这个控件的方法比较简单,将控件拖入窗体以后,关键是给它设置以下4个属性: (1) ControlToValidate:设置被验证的控件,可以在本属性的下拉列表中选择。 (2) ErrorMessage:当不能通过验证时显示的错误信息。 (3) Display:显示错误信息的位置,包括以下3种选择。 None:不显示错误信息。 Static:显示在设计时控件所放置的位置。 Dynamic:将错误信息动态显示在页面上。 (4) EnableClientScript:本属性为逻辑变量,默认为true,表示如有可能(例如浏览器版本为Internet Explorer 4.0以上),先在客户端验证。若将本属性值改为false,将不在客户端进行验证。,9.3.2 CompareValidator控件,CompareValidator 控件用来将输入到控件(例如TextBox控件)的值与输入到其他控件的值或常数值进行比较。几个重要的属性的设置方法如下。 (1) 通过设置ControlToValidate 属性指定被验证的输入控件。 (2) 如果要将输入控件与其他输入控件进行比较,将 ControlToCompare 属性设置为要与之相比较的控件。如果要将输入控件的值与某个常数值进行比较时,应将ValueToCompare 属性设置为与之比较的常数。 (3) 类型(Type)属性用于设置比较数据的类型。只有在同一类型的数据之间才能够进行比较。 (4) 操作符(Operator)属性用来指定比较的方法,如大于、等于等。如果将Operator属性设置为ValidationCompareOperator.DataTypeCheck,则CompareValidator控件将忽略 ControlToCompare 和ValueToCompare属性,并且仅仅指示输入到输入控件中的值是否可以转换为BaseCompareValidator.Type属性指定的数据类型。,9.3.3 RangeValidator控件,9.3.3 RangeValidator控件,9.3.3 RangeValidator控件,图9.1 时间范围验证,9.3.2 CompareValidator控件,将RangeValidator控件的ControlToValidate属性指向TextBox3,将Type设为String,将EnableClientScript属性设为False。在按钮单击的事件中书写以下代码: void Button1_Click(object sender, EventArgs e) DateTime tt1 = DateTime.Parse(TextBox1.Text); DateTime tt2 = DateTime.Parse(TextBox2.Text); DateTime tt3 = DateTime.Parse(TextBox3.Text); RangeValidator1.MinimumValue = tt1.ToShortDateString(); RangeValidator1.MaximumValue = tt2.ToShortDateString(); TextBox3.Text = tt3.ToShortDateString(); RangeValidator1.Validate(); if (!RangeValidator1.IsValid) RangeValidator1.ErrorMessage = “时间必须在前两者时间之间。“; 代码中调用了方法Validator()进行验证,验证的结果放在属性IsValid中。若RangeValidator.IsValid为false时,说明不能通过验证,应该显示错误信息。,9.3.4 RegularExpressionValidator 控件,控件RegularExpressionValidator控件用来验证输入的格式是否匹配某种特定的模式(正则表达式)。这类验证允许检查一些可以预知的字符序列,比如身份证号码、电子邮件地址、电话号码和邮编中的字符序列等。 除非浏览器不支持客户端验证,或者已明确禁止客户端验证(通过将 EnableClientScript 属性设置为 false),否则将同时执行服务器端和客户端验证。 客户端的正则表达式验证实现和服务器端的略有不同。在客户端,使用的是JScript 正则表达式语法。而在服务器端,使用的则是System.Text.RegularExpressions.Regex语法。由于 JScript 正则表达式语法是System.Text.RegularExpressions.Regex 语法的子集,所以最好使用 JScript 正则表达式语法,以便在客户端和服务器端得到同样的结果。 使用本控件进行校验时,除按照前面几个控件设置属性以外,最主要的区别是将控件的ValidationExpress属性设置检查模式。方法是单击属性右边的省略号按钮,在弹出的对话框中选择【标准表达式】,弹出的对话框如图9.2所示。 然后选择需要检查的模式即可。,9.3.4 RegularExpressionValidator 控件,图9.2 选择正则表达式,9.3.5 ValidationSummary控件,ValidationSummary控件用于在一个位置上集中显示来自 Web 网页上所有验证程序的错误信息。根据DisplayMode属性的设置,可以采用列表、项目符号列表或单个段落的形式来显示。通过设置控件的ShowSummary 和 ShowMessageBox 属性,可以确定显示的形式。,9.4 自定义控件,使用自定义控件(CustomValidator)时,可以自行定义验证算法,并同时利用控件提供的其他功能。 为了在服务器端验证函数,先将CustomValidator控件拖入窗体,并将ControlToValidate属性指向被验证的对象,然后给该验证控件的 ServerValidate 事件提供一个验证程序,最后在ErrorMessage属性中填写出现错误时显示的信息。 在ServerValidate 事件处理程序中,可以从ServerValidateEventArgs 参数的 Value 属性中获取输入到被验证控件中的字符串。验证的结果要存储到 ServerValidateEventArgs 的属性 IsValid (true或者false)中。 例如,我们利用自定义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; / 结果错误 如果需要同时提供客户端验证程序以便让具有DHTML能力的浏览器先进行验证时,应该在.aspx的HTML视图中用JavaScript语言编写验证程序,同时将验证的函数名写入控件的ClientValidationFunction属性中。,9.5 分组校验技术,在一个网页中通常会出现几个独立的输入部分,它们的作用不同,验证的时机也不相同,应该分别进行验证。例如,网页中既包括用于查询记录的输入部分,又包括用户认证部分,就属于这种情况。在HTML网页中可以设置多个表单,将这些输入控件分别放在不同的表单中,以便单独进行校验和提交数据。但是在ASPX网页中,每个网页就是一个运行在服务器的表单。表单的定义如下: 分组校验是ASP.NET 2.0版本才提出来的新技术,用来解决在ASPX网页中多组不同输入的校验问题。它要求利用各个控件的ValidationGroup属性给这些控件进行分组。 现在用一个简单的示例来说明分组校验的方法。假定有两组输入控件,各包括一个输入框(TextBox)和一个按钮(Button),并且分别放入了校验控件。为了进行分组,将其中一组的输入框、按钮和校验控件的ValidationGroup属性设置为Group1,而将另一组控件的ValidationGroup属性设为Group2。控件的布局如图9.3所示。,9.5 分组校验技术,图9.3 对验证控件分组,9.5 分组校验技术,对应的代码如下: 第一组校验控件: 第二组校验控件: ,9.5 分组校验技术, 为了简化分组方法,可以一手按住Shift键,另一手用鼠标单击组内各个控件,然后一起设置它们的ValidationGroup属性。,9.6 综 合 示 例,下面以一个订单信息页面为例练习使用多种类型的验证控件。窗体页的界面如图9.4所示。中间部分为输入框,是被验证的对象,右边是错误提示,通常由验证控件拖入的位置确定(最好放在被验证控件的旁边)。错误提示内容在控件的ErrorMessage属性中设置。程序运行时,只有错误出现时才会显示出来。 将“姓名”、“密码”、“订单号”、“地址”4个输入框设置为必须输入验证(RequiredFieldValidator)控件,如果输入为空时提示相应的错误信息。为“重复密码”输入框设置比较验证(CompareValidator)控件用来和上一次输入的密码进行比较,看两者是否一致。为E_mail输入框设置模式验证框(RegularExpres

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论