创建自定义验证控件(2)

接上篇 创建自定义验证控件(1)

开发环境VS2008+SQL2005

本篇将写一个比较复杂的自定义控件,AjaxValidator(AJAX自定义验证控件)。AjaxValidator控件用于创建一个服务器端的自定义验证函数。AjaxValidator可以在浏览器调用自定义的验证方法(即客户端脚本直接调用服务器端方法)。

AjaxValidator控件使用AJAX从客户端调用服务器端验证方法,使用AJAX优势在于用户不用显示地回传服务器端。

大家在创建一个注册表单,并且需要验证用户名字段,以确认用户输入的用户名在数据库中并不存在。本篇就利用AjaxValidator写了一个这样的DEMO。AjaxValidator控件可以在客户端调用服务端的验证方法来检查用户名在数据库中是否唯一。

AjaxValidator类的代码如下

Code

 

AjaxValidato控件继承BaseValidator,并实现了ICallbackEventHandler接口。ICallbackEventHandler接口定义了两个方法,当客户端发出AJAX请求时,这两个方法在服务器端调用。

在OnPreRender()方法中,注册了一个内嵌JAVASCRIPT文件和启动脚本。内嵌JAVASCRIPT文件包含了AjaxValidato控件在客户端验证表单字段时调用的客户端函数。启动脚本把客户端的AjaxValidatorEvaluateIsValid()方法和AjaxValidato控件关联起来。执行验证时,客户端验证框架自动调用这个JAVASCRIPT方法。

下面是AjaxValidato控件使用的JAVASCRIPT方法

Code

 

JAVASCRIPT方法AjaxValidatorEvaluateIsValid()通过调用WebForm_DoCallback()方法初始化一个AJAX调用。该方法调用AjaxValidator控件关联的服务器端验证方法。当AJAX调用完成时,再调用AjaxValidatorResult()方法。这个方法在客户端更新验证控件的显示。

页面代码:

Code

 

后台CS代码:

Code

 

这个页面演示了如何使用AjaxValidator控件。页面处理AjaxValidator控件的ServerValidate事件以后将一个自定义验证方法关联到控件上。

页面输入用户名和密码以后,提交表单这些字段的值就会插入到数据库User_Info中。

在后台代码,验证方法检查用户名在数据库中是否已经存在,如果输入的用户名已经存在,就会显示一个验证错误。提交表单返回到服务端之前,这个信息就会显示在浏览器中。

AjaxValidator可以关联任何服务器端验证方法。

数据库建表语句

 

Code

 

 

效果截图:

 



作者:mFrogmFrog的技术博客
出处:http://mFrog.cnblogs.com/
本文版权由作者全部保留,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted @ 2008-12-04 15:18 mFrog 阅读(2050) 评论(16)  编辑 收藏 网摘 所属分类: asp.net ajaxasp.net

  回复  引用  查看    
#1楼2008-12-04 15:38 | 米虫      
沙发~!
  回复  引用  查看    
#2楼2008-12-04 15:39 | 米虫      
板凳~
  回复  引用    
#3楼2008-12-04 15:43 | 羽翔[未注册用户]
羽翔在此一游!
  回复  引用    
#4楼2008-12-04 15:44 | PirateVersion[未注册用户]
老佩,来顶你一个,慢慢再看哈
  回复  引用    
#5楼2008-12-04 15:51 | MS。NET 二毛[未注册用户]
羡慕啊,
  回复  引用  查看    
#6楼2008-12-04 16:06 | 余诗      
学习老佩,受益了。
还有没有好的东西给我邮箱里发点!

  回复  引用  查看    
#7楼2008-12-04 17:34 | Q.Lee.lulu      
看看!!
  回复  引用  查看    
#8楼2008-12-04 18:19 | 酷酷魔术师      
恩,不错。写的比较容易懂。
  回复  引用  查看    
#9楼2008-12-04 18:36 | 小宇.net      
不错.
很强大

  回复  引用  查看    
#10楼2008-12-04 19:54 | 追梦浪子      
强大!非常详细!
  回复  引用    
#11楼2008-12-04 22:35 | blink518[未注册用户]
效果不错
我都用Jquery的jquery.validate来作的

  回复  引用    
#12楼2008-12-05 11:41 | lmtx[未注册用户]
楼主,能不能把代码发一份给我,非常感谢!
  回复  引用    
#13楼2008-12-05 22:47 | sunnychen[未注册用户]
建议把源代码附送,谢楼主了。
  回复  引用    
#14楼2008-12-06 20:23 | sunnychen[未注册用户]
楼主,问个问题,我按你所说去做。好像有个很怪的问题,
执行后台方法avUserName_ServerValidate(返回值是flase)后,还执行了button的btnSubmit_Click方法,
如果验证不通过,是不应该继续执行的啊?

  回复  引用  查看    
#15楼2009-02-18 16:31 | chgBlog      
楼主,请教个问题。
我把你的AjaxValidator.js用[assembly: System.Web.UI.WebResource("AjaxValidator.js", "application/x-javascript")]
方式嵌入进去,与AjaxValidator.cs一起生成DLL文件调用。
客户端出现“缺少对象”的错误,出现位置在执行
WebForm_DoCallback(val.id, value, AjaxValidatorResult, val, AjaxValidatorError, true)的时候,不知为何,请赐教!

  回复  引用  查看    
#16楼2009-02-25 22:53 | 猴哥      
在后台程序中最好加上if(Page.IsValid) 判断知否通过验证,这样就不会恶意向数据库中添加相同的数据了。
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1347649 NU5MuytUcbQ=



相关文章:

相关链接: