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

ASP.NET
C# Quoted-Printable编码、解码
asp.net Google的translate工具翻译 API
.NET读取所有目录下文件正则匹配文本电子邮件
asp.net 半角全角转化工具
AjaxControlToolKit 显示浏览者本地语言的方法
asp.net HTML文件上传标签
ASP.NET 绑定DataSet中的多个表
ASP.NET 重定向的几种方法小结
Asp.Net 重定向必须要知道的一些资料
ASP.NET 导出到Excel时保留换行的代码
Asp.Net Cache缓存使用代码
document.getElementsByName和document.getElementById 在IE与FF中不同实现
GridView单元格合并
asp.net 大文件上传控件
asp.net 日期函数 某月的第一天和最后一天的日期
asp.net 时间类 一周的周一和周末的日期
C# javaScript函数的相互调用
asp.net membership 密码重设
"虚拟路径"..."映射到另一个应用程序,这是不允许的!
如何传值在2个页面之间 要求不刷新父页面,并且不能用Querystring传值

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 161 ::
收藏到网摘: 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即可。

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