ASP.NET 2.0服务器控件之验证控件示例(1)
点击次数:17 次 发布日期:2008-11-26 12:17:31 作者:源代码网
|
源代码网推荐 源代码网推荐 1. 验证控件实现步骤 源代码网推荐 源代码网推荐 在创建验证控件过程中,需要实现服务器端验证和客户端验证等核心内容。下面列举了验证控件的常见实现步骤。 源代码网推荐 源代码网推荐 (1)验证控件类应由BaseValidator基类继承。这样可使验证控件自动继承参与验证框架所需要的功能。例如,通过继承BaseValidator的ControlToValidate属性,实现验证控件与验证目标控件的关联。 源代码网推荐 源代码网推荐 (2)实现验证控件所特有的一些属性。开发人员可根据应用需求,从方便实用的角度出发定义这些特有属性。 源代码网推荐 源代码网推荐 (3)重写AddAttributesToRender方法,将特有属性及相关内容添加到控件呈现中。当实现客户端验证代码时可能需要引用相关呈现内容。 源代码网推荐 源代码网推荐 (4)重写EvaluateIsValid方法,为验证控件添加服务器端验证逻辑。 源代码网推荐 源代码网推荐 (5)重写PreRender事件的事件处理方法OnPreRender,除调用基类实现方法外,还要实现对客户端验证脚本文件的注册。 源代码网推荐 源代码网推荐 (6)编写与验证控件一起打包的客户端验证脚本文件,并且将其放置到正确的目录中。 源代码网推荐 源代码网推荐 通过以上的一个或者几个步骤,开发人员就可以实现一个基本的验证控件。在实现过程中,服务器端验证逻辑和客户端验证逻辑必须保持一致,否则,即使输入数据通过了客户端验证,也无法通过服务器端验证。下面将通过一个典型实例来进一步说明验证控件的实现方法,以加深读者的理解。 源代码网推荐 源代码网推荐 2、典型应用 源代码网推荐 源代码网推荐 本节将使用上文所介绍的开发验证控件的方法,创建一个名为TelNumValidator的验证控件。该控件用于验证用户输入的电话号码是否符合规则。如果不符合规则,那么动态提示错误信息。其效果如图1。 源代码网推荐
源代码网推荐 图1 效果图(输入错误状态下) 源代码网推荐 源代码网推荐 如图1所示,页面中主要包括了一个TextBox文本框和一个提交按钮。用户必须输入正确格式的电话号码,才能够通过验证。图1中,由于没有输入正确的电话号码,当单击提交按钮时,则无法实现提交页面。同时,页面还分红蓝两种颜色给出了提示信息。下文详细讲解了验证控件的实现过程。 源代码网推荐 源代码网推荐 首先,在实现TelNumValidator控件之前,必须进一步明确验证条件。 源代码网推荐 源代码网推荐 对于国内电话号码,一般为两种模式:一种是区号为3位,电话号码为8位,另一种是区号为4位,电话号码为7位。据此,可得出用于验证的正则表达式:“d{3}-d{8}|d{4}-d{7}”。无论是服务器端验证逻辑,还是客户端验证逻辑,都必须遵从以上验证条件。只有符合这两种模式的输入数据才能够通过验证。 源代码网推荐 源代码网推荐 下面列出了验证控件TelNumValidator的服务器端验证的源代码。 源代码网推荐 源代码网推荐 using System; 源代码网推荐 using System.Collections.Generic; 源代码网推荐 using System.ComponentModel; 源代码网推荐 using System.Text; 源代码网推荐 using System.Web; 源代码网推荐 using System.Web.UI; 源代码网推荐 using System.Web.UI.WebControls; 源代码网推荐 using System.Text.RegularExpressions; 源代码网推荐 源代码网推荐 namespace WebControlLibrary 源代码网推荐 { 源代码网推荐 [DefaultProperty("Text")] 源代码网推荐 [ToolboxData("<{0}:TelNumValidator runat=server> 源代码网推荐 </{0}:TelNumValidator>") 源代码网推荐 ] 源代码网推荐 源代码网推荐 public class TelNumValidator : BaseValidator 源代码网推荐 { 源代码网推荐 // 定义私有变量,其中_clientFileUrl表示JavaScript文件存储目录 源代码网推荐 // ValidationExpression表示正则表达式 源代码网推荐 源代码网推荐 private string _clientFileUrl = "ClientFiles/"; 源代码网推荐 private const string ValidationExpression = @"(d{3}-d{8}|d{4}-d{7})"; 源代码网推荐 // 定义属性ClientFileUrl,用于获取或设置脚本相对路径 源代码网推荐 [ 源代码网推荐 Description("获取或设置脚本相对路径"), 源代码网推荐 DefaultValue("ClientFiles/"), 源代码网推荐 Category("Appearance") 源代码网推荐 ] 源代码网推荐 源代码网推荐 public string ClientFileUrl 源代码网推荐 { 源代码网推荐 get 源代码网推荐 { return _clientFileUrl; } 源代码网推荐 set 源代码网推荐 { _clientFileUrl = value; } 源代码网推荐 } 源代码网推荐 //重写AddAttributesToRender,为验证控件添加特殊属性evaluationfunction和validationexp 源代码网推荐 protected override void AddAttributesToRender(HtmlTextWriter writer) 源代码网推荐 { 源代码网推荐 base.AddAttributesToRender(writer); 源代码网推荐 if (RenderUplevel) 源代码网推荐 { 源代码网推荐 writer.AddAttribute("evaluationfunction", "TelNumValidatorEvaluateIsValid", false); 源代码网推荐 writer.AddAttribute("validationexp", ValidationExpression); 源代码网推荐 } 源代码网推荐 } 源代码网推荐 //重写EvaluateIsValid方法,定义服务器端验证逻辑 源代码网推荐 protected override bool EvaluateIsValid() 源代码网推荐 string controlValue = GetControlValidationValue(ControlToValidate); 源代码网推荐 if (controlValue == null) 源代码网推荐 { 源代码网推荐 return true; 源代码网推荐 } 源代码网推荐 controlValue = controlValue.Trim(); 源代码网推荐 try 源代码网推荐 { 源代码网推荐 Match m = Regex.Match(controlValue, ValidationExpression); 源代码网推荐 return (m.Success && (m.Index == 0) && (m.Length == controlValue.Length)); 源代码网推荐 } 源代码网推荐 catch 源代码网推荐 { 源代码网推荐 return false; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 //重写OnPreRender方法,注册客户端脚本程序 源代码网推荐 protected override void OnPreRender(EventArgs e) 源代码网推荐 { 源代码网推荐 base.OnPreRender(e); 源代码网推荐 if (RenderUplevel) 源代码网推荐 {Page.ClientScript.ReGISterClientScriptBlock ( typeof(TelNumValidator), 源代码网推荐 "ClientValidator", GetClientFileUrl ( "ClientValidator.js" )); 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 // 实现辅助函数GetClientFileUrl,用于获取JavaScript文件的完整路径 源代码网推荐 源代码网推荐 private string GetClientFileUrl(string fileName) 源代码网推荐 { 源代码网推荐 string tempClient = String.Format("<script language="javascript" src="{0}"></script>", (ClientFileUrl + fileName)); 源代码网推荐 return tempClient; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 从以上代码可知,TelNumValidator控件的实现,是按照上文说明的验证控件实现步骤编写的。该类实现了以下重要逻辑: 源代码网推荐 源代码网推荐 (1)验证控件类TelNumValidator类从BaseValidator基类继承,因此,该类自动继承了通用验证控件应该具备的属性、方法和事件。 源代码网推荐 源代码网推荐 (2)定义用于获取或设置脚本相对路径的属性ClientFileUrl,默认值为“ClientFiles/”。通过该属性页面开发者可自定义客户端验证脚本文件的目录,这样可增加控件的灵活性。 源代码网推荐 源代码网推荐 (3)重写AddAttributesToRender方法,为控件添加特性evaluationfunction和validationexp。特性evaluationfunction对应的值是进行客户端验证的方法名。特性validationexp对应的值是用于验证的正则表达式,通过将其呈现到客户端,那么客户端验证脚本即可使用该表达式。 源代码网推荐 源代码网推荐 (4)重写EvaluateIsValid方法,定义服务器端验证逻辑。(5)重写OnPreRender方法,注册客户端脚本文件ClientValidator.js。 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
