当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 让.Net验证控件与自定义验证合作无间

ASP.NET
Script:WINDOWS Script 枚举运行中进程
使用Flex结合Webservice完成域名查询
VSTS Team System 总算装好了。
用于部署数据库的 数据库初始化工具 xzSQLDeploy Tools V1.0 (for SQLServer) f...
一个将阿拉伯数字转换成中文大写的最简单算法
SCRIPT:使用Windows Script 关闭和打开指定程序
Script:使用WINDOWS脚本访问WEB SERVICES
asp.net连接Access数据库
VB中IIS Application发布可能出现的问题
VB打包后的安装问题
Nhibernate的数据分页技术(续)
使用API函数复制文件,可显示进度。
VB打包技巧
VB.NET实现DirectSound9 (9) 实现示波器
VB.NET 实现DirectSound9 (10) 均衡器
[水晶报表部署系列之一]轻松搞定水晶报表9.2打包
DataGrid 中双向排序的一种办法
利用System.EventHandler来实现两个窗体间的事件调用
多线程应用程序中调用窗体的一点心得
Smart Client之旅一:用B/S方式运行Exe应用程序

ASP.NET 中的 让.Net验证控件与自定义验证合作无间


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 108 ::
收藏到网摘: n/a

场景:
一个注册表单,其间有.Net自带的验证控件,但有一些验证必须得借助于另外的一些js,如验证是否复选了注册协议(这里为了说明,只举这样一个简单的例子)。
这样的话,会涉及到二次验证,第一次可能是.Net验证控件的验证,第二次会认证用户有没有复选注册协议,如何让这二者合作无间呢?
这里不得不提到.Net的Page_ClientValidate()函数,该函数返回当前Page页中的表单有没有通过Validate的验证.


新建一个Page页面,简单的放一些控件

  1. <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>  
  2.         <asp:Button ID="Button1" runat="server"   Text="Button"    
  3.             ValidationGroup="submit" CausesValidation="True"    
  4.             onclick="Button1_Click" />  
  5.         <input type="checkbox" id="checkbox" />我已阅读注册协议       
  6.         <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"    
  7.             ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage="不能为空"    
  8.             ValidationGroup="submit"></asp:RequiredFieldValidator>  

页面呈现
图片可能已被缩小,点击查看原图
TextBox留空,点击Button,会进行一次验证,当在TextBox中输入文本时,再点击提交,验证通过,引发OnClick事件,但用户是否复选了注册协议此处还未做判断。
图片可能已被缩小,点击查看原图
此时需要我们手写验证函数了
  1. <script type="text/javascript">   
  2.         function test() {   
  3.             var isCheck = document.getElementById('checkbox').checked;   
  4.             if (isCheck) {   
  5.           //Page_ClientValidate('submit'),这里有不同的ValidGroup,所以Page_ClientValidate传递是指定的GroupName   
  6.                 if (Page_ClientValidate('submit')) {   
  7.                     alert('验证成功');   
  8.                     return true;   
  9.                 }   
  10.             }   
  11.             else {   
  12.                 alert('您必须同意注册协议');   
  13.                 return false;   
  14.             }   
  15.   
  16.             return false;   
  17.         }   
  18.     </script>  

修改后的代码
  1. <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>  
  2.        <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="submit" CausesValidation="True"  
  3.            OnClientClick="return test();" OnClick="Button1_Click" />  
  4.        <input type="checkbox" id="checkbox" />我已阅读注册协议   
  5.        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1"  
  6.            Display="Dynamic" ErrorMessage="不能为空" ValidationGroup="submit"></asp:RequiredFieldValidator>  

预览页面
图片可能已被缩小,点击查看原图
图片可能已被缩小,点击查看原图
图片可能已被缩小,点击查看原图
到这里好像已经结束了,但查看html源代码会发现:
  1. <input type="submit" name="Button1" value="Button"    
  2. onclick="return test();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button1", "", true, "submit", "", false, false))" id="Button1" />  

Button1除了有return test()外还有WebForm_DoPostBackWithOptions这样一段,很明显WebForm_DoPostBackWithOptions是不会被执行的,去掉这段也很简单,
将Button1的CausesValidation设为false即可。

当然,你也可以完全不用验证控件来实现。