虽然大部分时间一直从事asp.net的开发,对于一些常用的asp.net服务器端验证控件及它们的组合使用比较熟悉,如:
CompareValidator ——比较验证控件
RangeValidator ——范围验证控件
RegularExpressionValidator ——正则验证控件
RequiredFieldValidator ——必填验证控件
但是一直没去研究CustomValidator控件的用法,心中自然也有一种想法:好不容易从写js验证的痛苦中摆脱出来,如今是能不回去就不要回去了,但是有时候又会遇到一些用上面提到的验证控件没有办法做到的情况(当然是指在客户端没办法做到,我要是说在服务器端没办法做到就让大家笑掉大牙了),用自然想它在客户端完成验证了,至少也要先在客户端验证一下,通过客户端验证再到服务器端验证,这样减少数据的往返时间,降低网络流量和保证反应及时性。

CustomValidator 是一个提供灵活验证方式的控件,它也能在客户端和服务器端验证,分别提供了两种验证的方法原型:
服务器端验证:

void ServerValidation (object source, ServerValidateEventArgs args)

客户端验证(js):

function ValidationFunctionName(source, arguments)

无论对于客户端验证还是服务器端验证,设置通过验证的办法就是将第二个参数的IsValid属性设置为true即可,反之设置为false。

下面我以两个例子来讲述如何使用CustomValidator 来进行验证,第一个用法是用来验证TextBox,第二个用法是验证CheckBoxList,确保其中只能选中一项,而且必须选中一项,对于TextBox这类的控件,我这里设置了对应的CustomValidator 的ValidateEmptyText="True"属性,这样即使控件值为空也能得到验证。

全部代码如下(这里是cs代码和html代码混合的模式):

  1. <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  7. <meta name="keywords" content="CustomValidator控件用法" />
  8. <meta name="description" content="周公讲述CustomValidator控件用法" />
  9. <title>CustomValidator控件用法</title>
  10. </head>
  11. <script language="javascript" type="text/javascript">
  12. function ClientValidateUserName(source, args) {
  13. //alert(source);source=CustomValidator1,为验证控件
  14. //alert(args);
  15. var obj = document.getElementById("txtUserName");
  16. if ((obj.value == "") || (obj.value.length > 10)) {
  17. args.IsValid = false;
  18. }
  19. else {
  20. args.IsValid = true;
  21. }
  22. }
  23.  
  24. function CheckCheckBoxList(source, args) {
  25. var obj = document.getElementById('<%=this.cbAgeRangeList.ID%>'); //返回具有和属性id的值相同或相似的对象集合
  26. var k, right = false;
  27. var length = (obj.all.tags('input').length); //返回obj对象里具有“input”标签对象的集合
  28. for (k = 0; k < length; k++) {
  29. //alert(" name:"+obj.all.tags('input')[k].name+"是否:"+obj.all.tags('input')[k].checked);
  30. if (obj.all.tags('input')[k].checked) // obj对象里具有input标签对象键值为k的属性为checked的值
  31. {
  32. right = !right;
  33. }
  34.  
  35. }
  36. if (right) {
  37. args.IsValid = true;
  38. }
  39. else {
  40. args.IsValid = false;
  41. }
  42. }
  43. </script>
  44. <script runat="server">
  45. protected void Page_Load(Object Src, EventArgs E)
  46. {
  47. if (!IsPostBack) DataBind();
  48. }
  49. public void ServerValidateUserName(object source, ServerValidateEventArgs args)
  50. {
  51. if ((string.IsNullOrEmpty(txtUserName.Text)) || (txtUserName.Text.Length > 10))
  52. {
  53. args.IsValid = false;
  54. }
  55. else
  56. {
  57. args.IsValid = true;
  58. }
  59. }
  60. </script>
  61. <body>
  62. <form id="Form1" runat="server">
  63. UserName:<asp:TextBox ID="txtUserName" runat="server" />
  64. <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="错误信息" ControlToValidate="txtUserName"
  65. ClientValidationFunction="ClientValidateUserName" ValidateEmptyText="True"></asp:CustomValidator>
  66. <asp:Button ID="btnValid1" runat="server" Text="验证用户名" />
  67. <asp:CheckBoxList ID="cbAgeRangeList" runat="server" Height="36px" Width="400px"
  68. RepeatDirection="Vertical">
  69. <asp:ListItem Value="1"><16</asp:ListItem>
  70. <asp:ListItem Value="2">16-22</asp:ListItem>
  71. <asp:ListItem Value="3">22-30</asp:ListItem>
  72. <asp:ListItem Value="4">30-40</asp:ListItem>
  73. <asp:ListItem Value="5">40-50</asp:ListItem>
  74. <asp:ListItem Value="6">50-60</asp:ListItem>
  75. <asp:ListItem Value="6">60-80</asp:ListItem>
  76. <asp:ListItem Value="6">>80</asp:ListItem>
  77. </asp:CheckBoxList>
  78. <asp:CustomValidator ID="CustomValidator2" runat="server" ErrorMessage="请正确选择年龄段"
  79. ClientValidationFunction="CheckCheckBoxList"></asp:CustomValidator>
  80. </form>
  81. </body>
  82. </html>

  

CustomValidator控件用法的更多相关文章

  1. 关于Datagridview控件用法的一些总结(设置列chicun)

    1. 关于Datagridview控件用法的一些总结:http://www.cnblogs.com/mingjiatang/p/4968049.html

  2. [Python爬虫] 之六:Selenium 常用控件用法

    Selenium 常用控件用法 1.文本框 上图中,如何定位搜索文本框,并输入搜索内容进行搜索 首先:利用方法 find_element_by_xpath定位元素:inputElements = se ...

  3. Jquery + css 日期控件用法实例.zip

    /*==============================================================================** Filename:common.j ...

  4. xtrapivotcontrol 控件用法及相关属性

    XtraPivotControl使用指南:可参照以下的文档: 转载自:http://wenku.baidu.com/view/d7886b20aaea998fcc220e53.html 上面链接中对x ...

  5. iOS UIProgressView控件用法

    IOS中进度条控件的用法总结. 进度条控件是IOS开发中一个简单的系统控件,使用总结如下: 初始化一个进度条: - (instancetype)initWithProgressViewStyle:(U ...

  6. Vc++ 控件用法总结之List Control

    1.新建对话框MFC,在对话框上放一个ListCtrl ID:IDC_PATH View:Report 2.为ListCtrl添加变量 右击->添加变量m_wndPath 3.找到OnInitD ...

  7. My97DatePickerBeta 时间选择控件用法

    用法说明:只需要调用一个js<script language="javascript" type="text/javascript" src=" ...

  8. DataGridView控件用法合集

    1.当前的单元格属性取得.变更 Console.WriteLine(DataGridView1.CurrentCell.Value) Console.WriteLine(DataGridView1.C ...

  9. 关于Datagridview控件用法的一些总结

    一.引言 Datagridview控件在winform开发中还是比较常用,一般的数据库系统都会使用它,但是想要友好的展示数据,形成良好的用户界面,那么就要对c#库中默认的Datagridview设置进 ...

随机推荐

  1. Android Studio 之 环境搭建

    从网上整理的安装步骤及初次使用问题解决. 一.安装步骤 1.安装前确认JDK已经安装并配置好环境变量(要求JDK1.7以上的版本). 2.官网下载Windows安装包,网上下载的版本是android- ...

  2. Go语言使用PostgreSQL数据库

    Go语言使用PostgreSQL数据库 PostgreSQL和MySQL比较,它更加庞大一点,因为它是用来替代Oracle而设计的.所以在企业应用中采用PostgreSQL是一个明智的选择. 现在My ...

  3. 如何处理Android中的防缓冲区溢出技术

    [51CTO专稿]本文将具体介绍Android中的防缓冲区溢出技术的来龙去脉. 1.什么是ASLR? ASLR(Address space layout randomization)是一种针对缓冲区溢 ...

  4. Android sdk content loader 0%

    打开Eclipse以后,一直在Android sdk content loader 0%,等了很长时间都没有变,解决的方法是Project->Clean->Clean all projec ...

  5. 如何查看页面是否开启gzip压缩

    F12 选择Network 表头右键: 如果开启了gzip则显示gzip,没有则是空. 上图是百度首页,显示已经进行gzip压缩.

  6. Java多线程之线程的状态以及线程间协作通信导致的线程状态转换

      转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6561589.html  一:线程的状态以及变化图 Java中线程中状态可分为五种:New(新建状态),Ru ...

  7. excel如何快速实现数据区域的框选

    这里会存在2个情况,一个是快速的选择一行或者一列的数据,另外一个是快速的选择一块的数据(数据区域) 1.当有上万条数据时,怎么快速的选择一行或一列的数据? 方法:将鼠标放在需要选择的数据区域的开头位置 ...

  8. HttpServletResponse对象(一)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...

  9. loadrunner error 27796 Failed to connect to server

    (2012-10-23 01:23:17) 转载▼   Action.c(58): Error -27796: Failed to connect to server "www.baidu. ...

  10. Docker安装和常用命令

    Docker安装 Docker的安装可以参考 https://docs.docker.com/ 下面的 Get Docker / Docker CE / Linux, 需要关注的主要是CentOS和U ...