ASP.NET 2.0服务器控件之实现验证控件

asp.net|服务器|控件

  为了更好的创建交互式Web应用程序,加强应用程序安全性(例如,防止脚本入侵等),开发人员应该对用户输入的部分提供验证功能。过去,输入验证功能基本由自行编写的客户端脚本来完成这种实现方法既繁琐,又容易出现错误。随着技术的发展,ASP.NET技术通过提供一系列验证控件来克服这些缺点,例如,RequiredFieldValidator、CompareValidator、RangeValidator等。使用这些验证控件,开发人员可以向Web页面添加输入验证功能,例如定义验证规则、定义向用户显示的错误信息内容等。通常情况下,ASP.NET提供的验证控件可以满足大多数Web应用的需要,然而,在某些情况下,内置的验证控件还是无法完成应用需求对数据输入的特殊要求。为了弥补这个缺憾,ASP.NET 2.0定义了一个可以在控件开发中使用的可扩充验证框架。开发人员可以通过使用这个验证框架自行定义验证控件。本文将对实现验证控件的重要方面进行介绍,内容包括内置验证控件概述,验证框架等等。

  1. 内置验证控件概述

  验证控件完成对输入数据进行验证的功能。通过将验证控件和输入控件关联,开发人员可以向Web页面添加输入验证功能。另外,还提供了自定义验证规则的方法和自定义错误信息的内容和显示方式等。本节将概括性介绍ASP.NET内置验证控件。

  ASP.NET 2.0共包含5个内置验证控件:RequiredFieldValidator、CompareValidator、RangeValidator、RegularExpressionValidator和CustomValidator,这些控件直接或者间接派生自System.Web.UI.WebControls.BaseValidator。每个验证控件执行特定类型的验证,并且当验证失败时显示自定义消息。下面简要介绍了这5个验证控件。

  (1)RequiredFieldValidator控件

  该控件用于确保被验证的控件中包含一个值。

  (2)CompareValidator控件

  该控件使用比较运算符(小于、等于、大于等)将用户输入与一个常量值或另一控件的属性值进行比较。

  (3)RangeValidator控件

  该控件用于检查用户的输入是否在指定的上下限内。可以检查数字对、字母字符对和日期对的范围。

  (4)RegularExpressionValidator控件

  该控件用于检查项与正则表达式定义的模式是否匹配。这种验证类型允许检查可预知的字符序列,如身份证号码、电子邮件地址、电话号码、邮政编码等中的字符序列。

  (5)CustomValidator控件

  该控件用于使用您自己编写的验证逻辑检查用户输入。这种验证类型允许检查在运行时导出的值。

  除以上内置验证控件外,ASP.NET 2.0还提供了一个用于显示错误信息概要的控件ValidationSummary。该控件的目的是将来自页上所有验证控件的错误信息,一起显示在一个位置,例如,一个消息框或者一个错误信息列表。ValidationSummary控件不执行验证,但是它可以和所有验证控件一起使用,更准确的说,ValidationSummary可以和上述5个内置验证控件以及自定义验证控件,共同完成验证功能。

  在Web页面中使用验证控件,我们需要注意以下几个关键的方面。

  首先,将验证控件与输入控件关联起来,然后,根据不同类型验证控件的特征定义相关属性。例如:所有验证控件都要通过ContrlToValidate属性进行关联设置,都必须通过ErrorMessage属性定义错误信息内容;对于范围检查控件RangeValidator来讲,必须定义MaximumValue和MinimumValue属性来指定有效范围的最小值和最大值;对于模式匹配控件RegularExpressionValidator来讲,必须使用ValidationExpression属性指定用于验证输入控件的正则表达式。以上介绍的使用方式,很可能使得一个输入控件关联多个验证控件,这在ASP.NET 2.0中是允许的。

  其次,ASP.NET 2.0中为验证控件提供了一个新属性ValidationGroup。开发人员可使用使用该属性将单个控件与验证组相关联,然后,使用多个ValidationSummary控件收集和报告这些组的错误。如果未指定验证组,则验证功能等效于ASP.NET 1.x中的验证功能。如果在多个控件中指定了多个验证组,则一定会显示多个验证摘要控件,因为一个验证摘要只显示一个组的验证错误。回发到服务器且当前具有CausesValidation属性的控件也引入了此ValidationGroup属性,该属性确定当控件导致回发时应当验证的控件组。如果未指定验证组,则会验证默认组,默认组由所有没有显式分配组的验证程序组成。

  最后,一旦在Web页面中正确包含验证控件,那么开发人员就可以使用自己的代码来测试页或者单个验证控件的状态。例如,在使用输入数据之前来测试验证控件的IsValid属性。如果为true,表示输入数据有效;如果为false,表示输入错误,并显示错误信息。对于Web页面来讲,只有当所有验证控件的IsValid都为true,即所有输入数据都符合验证条件时,Page类的IsValid属性才设置为true,否则为false。另外,在页面级验证中,ASP.NET 2.0还提供了两个新方法来支持验证功能。一个是来自Page类的GetValidators方法,该方法将检索属于指定验证组的验证程序。还有一个也是来自Page类的Validate方法的重载,其允许采用验证组作为参数。

  2. 验证控件实现机制

  通常情况下,使用ASP.NET 2.0的5个内置验证控件,可以满足多数应用程序的需要。然而,为了提高开发的灵活性,满足不同Web应用的需求,ASP.NET 2.0内置了一个可扩充的验证框架。该框架定义了服务器端和客户端的基本实现规则。开发人员可以使用这个可扩充的验证框架,根据应用需要设计自己的验证控件来实现新的设计规则。

  (1)服务器端实现机制

  并非所有的Web服务器控件都支持验证控件。可以使用验证控件进行验证的标准控件包括:TextBox、ListBox、DropDownList、RadioButtonList、HtmlInputText、HtmlInputFile、HtmlSelect和HtmlTextArea、FileUpload和HtmlInputPassword等。这些支持验证控件的控件有一个共同特征,即元数据中包含System.Web.UI.ValidationPropertyAttribute。ValidationPropertyAttribute定义了控件用于标识验证属性的元数据特性。除此之外,如果由以上控件派生的自定义控件类,需要支持验证,那么必须在控件类前定义ValidationPropertyAttribute,这样该控件才能作为验证目标控件。开发人员在实现自定义验证控件过程中,必须首先了解以上所介绍的验证目标控件内容,然后才能更好的开发控件。

  为了实现自定义验证控件,ASP.NET 2.0提供了3个重要对象:(1)System.Web.UI.IValidator;(2)System.Web.UI.WebControls.BaseValidator;(3)System.Web.UI.WebControls.CustomValidator。以上三者之间联系紧密,由它们组成的验证框架具有很强的灵活性和可扩充性。IValidator接口是验证框架的基础,任何实现该接口的类都可以作为验证程序。BaseValidator是抽象基类,该类实现IValidator接口,并继承System.Web.UI.WebControls.Label控件。通常情况下,自定义验证控件都派生自该类。CustomValidator实际是一个验证控件,开发人员可以用它来添加自定义的验证逻辑。为了更好的说明验证框架,下面将逐一介绍以上3个对象。

  IValidator接口的定义如下:

public interface Ivalidator
{
 string ErrorMessage {get; set;}
 bool IsValid {get; set;}
 void Validate();
}

  IValidator接口的成员包括1个方法和2个属性。ErrorMessage属性用于获取或设置条件验证失败时生成的错误信息。IsValid属性当由类实现时,获取或设置一个值,通过该值指示用户在指定控件中输入的内容是否通过验证。Validate方法由类实现时,计算它检查的条件并更新IsValid属性。对于开发人员来讲,如果实现的是一个普通验证程序,而非验证控件,那么可以通过实现该接口来完成。其原因在于验证框架的实现分布在Page类、BaseValidator类和验证目标控件中。这些类之间的相关性不允许任意实现IValidator接口。对于实现自定义验证控件,推荐的方法是继承BaseValidator类。

  BaseValidator是验证框架中最为重要的部分。该类派生自Label类,并且实现IValidator接口。无论是内置验证控件,还是自定义验证控件,都必须派生自BaseValidator类。该类实现所有验证控件都必须实现的通用属性。下面介绍了一些常用验证属性。

  · ControlToValidate属性

  该属性值为String类型,其用于验证控件将计算的输入控件的编程ID。如果此为非法ID,则引发异常。

  · Display属性

  该属性值为ValidatorDisplay类型,其用于指定的验证控件的显示行为。此属性可以为下列值之一:(1)None—验证控件从不内联显示。如果希望仅在ValidationSummary控件中显示错误信息,则使用此选项。(2)Static—如果验证失败,验证控件显示错误信息。即使输入控件通过了验证,也在Web页中为每个错误信息分配空间。当验证控件显示其错误信息时,页面布局不变。由于页面布局是静态的,同一输入控件的多个验证控件必须占据页上的不同物理位置。(3)Dynamic—如果验证失败,验证控件显示错误信息。当验证失败时,在页上动态分配错误信息的空间。这允许多个验证控件共享页面上的同一个物理位置。注意:由于验证控件的空间是动态创建的,所以页面的物理布局会发生更改。为了防止页面布局在验证控件变得可见时更改,必须调整包含验证控件的HTML元素的大小,使其大得足以容纳验证控件的最大大小。

  · ErrorMessage属性

  该属性值为String类型,其用于当验证失败时,在ValidationSummary控件中显示的错误信息。如果未设置验证控件的Text属性,则验证失败时,验证控件中仍显示此文本。ErrorMessage属性通常用于为验证控件和ValidationSummary控件提供各种消息。注意:此属性不会将特殊字符转换为HTML实体。例如,小于号字符(<)不转换为<。这允许将HTML元素(如<IMG>元素)嵌入到该属性的值中

  · IsValid属性

  该属性值为bool类型,其用于指示ControlToValidate属性所指定的输入控件是否被确定为有效。

  由该类派生的验证控件,可以不必再次实现以上通用属性,而只要根据应用需要另外定义一些属性和验证逻辑即可。例如,对于RangeValidator控件,除具有以上通用属性外,还定义了用于限定取值范围的MinimumValue和MaximumValue属性,以及用于指定要比较的值的数据类型的Type属性。此外,该控件的验证逻辑是通过重写BaseValidator.EvaluateIsValid方法实现的。由此看来,BaseValidator简化了自定义验证控件的实现过程,为控件开发人员提供了方便。

  CustomValidator派生自BaseValidator类,它是5个内置验证控件之一。通常情况下,页面开发者使用CustomValidator来添加自定义的验证逻辑,这只要通过定义ServerValidate事件的事件处理方法以及ClientValidationFunction属性来完成。由于CustomValidator不提供复用机制(访问属性为public),因此自定义验证控件不能自该类派生。

  (2)客户端实现机制

  上文介绍了为实现验证控件,开发人员必须掌握的3个核心对象。掌握这些对象的定义和使用方法对于开发验证控件具有重要意义。通过它们,我们可以在服务器验证中添加验证逻辑。当页面回传时,验证目标控件的输入数据被发往服务器端参与验证逻辑。如果输入数据不能满足验证条件,那么页面将重新呈现,并且要求用户再次进行输入。整个验证过程可能需要多次往返,这样必然降低应用程序的易用性,并给服务器增加负担。

  为了解决以上问题,开发人员必须学会为验证控件添加客户端验证机制。如果用户的浏览器支持DHTML和JavaScript技术,并且页面和验证控件的EnableClientScript均设置为true,那么就可以在客户端执行验证。客户端验证通过在向服务器发送用户输入前,检查用户输入、改变一些页面效果来增强验证过程。例如,通过在客户端检测输入错误,从而避免服务器端验证所需要的信息来回传递。服务器端验证总是要被执行的,这看起来好像是与客户端验证产生了重复,实际不然。出于安全考虑,如果某些用户通过手工提交恶意数据,而绕过客户端验证,那么服务器端验证的执行将对保护应用程序的安全性,甚至为服务器的安全性提供有力支持。

  在ASP.NET 2.0中,如果开发人员使用内置验证控件实现验证功能,那么ASP.NET 2.0将自动产生相关的JavaScript代码。如果开发人员查看相关HTML源代码,那么将会发现有些来自WebResource.axd的JavaScript文件链接。然而,我们是无法查看相关文件代码的。这一点与ASP.NET 1.x不同。在ASP.NET 1.x中,默认情况下,在目录“C:\Inetpub\wwwroot\aspnet_client\system_web\版本号”中包含一个WebUIValidation.js文件。该文件中包括了实现客户端验证的JavaScript代码。开发人员可以通过阅读这些代码来了解验证功能的具体实现方法。ASP.NET 2.0中没有存在相关的源代码文件,而是通过WebResource.axd等机制来实现。

  有关实现客户端验证的内容,主要涉及实现客户端功能等知识。这些内容在前面的文章中已经详细进行了讲解。有兴趣的读者可阅读有关文章。

  3. 小结

  本文主要介绍了内置验证控件,以及自定义验证控件实现机制。实际上,如果读者开发自行实现验证控件时,将会发现这个过程需要很多知识。例如,服务器端编程语言、JavaScript、CSS、DHTML等等。因此,如果读者希望创建高质量的验证控件,那么不仅要了解相关知识,而且必须达到精通的水平。

时间: 2024-10-31 18:23:58

ASP.NET 2.0服务器控件之实现验证控件的相关文章

体验ASP.NET 2.0 中的数据访问控件

asp.net|访问|控件|数据 简介 数据访问一直是开发 Web 应用程序的一个关键问题.几乎每个商业应用程序都需要数据驱动的 Web 页面.由于数据访问如此普遍,开发人员不断地为简单的数据库任务重新生成复杂的代码就显得毫无意义了.开发人员需要从格式各异的不同数据源中快速访问数据.幸运的是,ASP.NET 2.0 中新增的数据访问控件和 ADO.NET 2.0 解决了这一问题. 对于传统的 ASP 和 ASP.NET 1.1 应用程序而言,开发人员不得不创建代码访问和更新数据库,将检索到的数据

ASP.NET 2.0中的DataSource系列控件

asp.net|控件 ASP.NET 2.0中,在其中的数据连接方面做了很大的改进,新加入的datasource系列控件,使得在数据库的连接方面更加容易,很多都可以通过向导式的设置来完成SQL语句的编写和数据库连接.ASP.NET 2.0中的DataSource系列控件总共有6种,分别是: Sqldatasource控件----用于连接sql数据库的数据源控件 Accessdatasource控件----用于连接access数据库的数据源控件 ObjectDataSource控件----用于连接

ASP.NET 2.0的新增服务、控件与功能

asp.net|控件 [导读]全文介绍了ASP.NET 2.0中新增的控件和功能,包括Master Pages,Data Source控件.Skin的支持.GridView和Details View的引入,在此基础上,ASP.NET 2.0的安全模型得到了极大的提高,包括登录控件.角色管理器.个性化等等方面的支持,在类库方面也增加了许多新特性,如全新的代码分隔模型.客户端回调等等,让读者对于ASP.NET的新特性有一个全面的了解. 在首次公诸于众以来的短短四年中,ASP.NET业已成为在Wind

ASP.NET 2.0移动开发之列表控件

asp.net|控件 概述 在很多情况下,我们都会使用到列表控件来方便用户选择一些选项.例如在某网站上注册新用户时,通常会询问你的性别是"男"还是"女",这时我们用单项按钮以供用户做出相应的选择.还有当你填写自己的家庭地址时,通常会使用到一个包含各省省名的下拉列表来供用户直接选择,这样可以减少用户的输入量.上述的这些单项按钮和下拉列表都在ASP.NET移动程序中都是以列表控件的形式存在的.我们可以使用列表控件来呈现各种形式(单项.多选.下拉列表)的列表,以供用户选择

asp.net 电话 手机 中英 数字验证控件

asp教程.net 电话 手机 中英 数字验证控件 1 对手机号码的验证:^1[0-9]d{9}$,之前使用的是:/^0{0,1}(13[4-9]|15[7-9]|15[0-2])[0-9]{8}$/, 编辑部在使用的时提出问题:怎么189的号不能添加啊,我一看,正则表达式没有189的号,然后跑去找一个资历老一点的同事,他给我的正则是:d{11},我一看这个验证不对啊!只能保证输入的是11位数字,格式什么的就没限制了,然后自己改了下,现在还没出现什么问题 2 只输入中文或英文:[u4e00-u9

抢先试用ASP.NET 2.0中的新型安全控件

asp.net|安全|控件 一. 引言 与ASP.NET 2.0一同上市的有几个新的安全控件-它们位于工具的Login选项卡中(见图1)-这些控件大大简化了Web开发人员的工作.通过使用这些新的安全控件,现在你可以执行例如用户登录.注册.口令改变等的任务:而且,为此做出的努力仅是拖放相应的控件到你的Web表单上去.在本文中,我将向你展示怎样使用这些新控件来实现用户认证. 首先,让我们探索一下LoginView.LoginStatus和LoginName三个控件的使用.首先,让我们使用Visual

在ASP.NET 2.0中使用页面导航控件

asp.net|控件|页面 几乎每个网站里,为了方便用户在网站中进行页面导航,都少不了使用页面导航控件.有了页面导航的功能,用户可以很方便地在一个复杂的网站中进行页面之间的跳转.在以往的WEB编程中,要写一个好的页面导航功能,并不是那么容易的,也要使用一些技巧.而在asp.net 2.0中,为了方便进行页面导航,新增了一个叫做页面导航控件sitemapdatasource,其中还可以绑定到不同的其他页面控件,比如treeview,menu等,十分灵活,使到能很方便地实现页面导航的不同形式,而且还

ASP.NET 2.0的multiview和wizard控件

在本文中,将以vs.net 2005为例,说明如何使用这两个控件来创建应用,分别举出两个例子:在线调查和注册用户,读者可以通过本文加深对这两个控件的认识,在这两个例子中,我们还将使用到asp.net 2.0中的一个新的控件masterpage. 在asp.net 1.1中,如果要做一个具有向导式的应用程序,是比较麻烦的.所谓向导式应用,就是说比如一个注册用户的应用,是需要若干步完成的,用户填完某一步的表单后,可以点"下一步"而进入下一步,也可以使用"上一步"的功能回

在ASP.NET 2.0中使用webpart系列控件

在现在的网站设计中,更强调的是用户的个性化设置,让用户可以自由的设 置符合自己喜好的页面成为网站开发人员的头号难题,不过现在看来这个难题微 软帮我们解决了.在asp.net 2.0中新增加了一系列webpart控件,可以让用户很 方便地对网页的各区域布局进行调整.在一些web应用程序中,如果用户想自定 义页面布局,比如一个新闻发布系统,想让左,中,右三栏的位置进行调换的话 ,就可以使用webpart控件. 下面,我们来看下asp.net 2.0中webpart系列控件的一些基本用法. 首先,在v