虽然大部分时间一直从事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代码混合的模式):

<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="keywords" content="CustomValidator控件用法" />
<meta name="description" content="周公讲述CustomValidator控件用法" />
<title>CustomValidator控件用法</title>
</head>
<script language="javascript" type="text/javascript">
function ClientValidateUserName(source, args) {
//alert(source);source=CustomValidator1,为验证控件
//alert(args);
var obj = document.getElementById("txtUserName");
if ((obj.value == "") || (obj.value.length > 10)) {
args.IsValid = false;
}
else {
args.IsValid = true;
}
} function CheckCheckBoxList(source, args) {
var obj = document.getElementById('<%=this.cbAgeRangeList.ID%>'); //返回具有和属性id的值相同或相似的对象集合
var k, right = false;
var length = (obj.all.tags('input').length); //返回obj对象里具有“input”标签对象的集合
for (k = 0; k < length; k++) {
//alert(" name:"+obj.all.tags('input')[k].name+"是否:"+obj.all.tags('input')[k].checked);
if (obj.all.tags('input')[k].checked) // obj对象里具有input标签对象键值为k的属性为checked的值
{
right = !right;
} }
if (right) {
args.IsValid = true;
}
else {
args.IsValid = false;
}
}
</script>
<script runat="server">
protected void Page_Load(Object Src, EventArgs E)
{
if (!IsPostBack) DataBind();
}
public void ServerValidateUserName(object source, ServerValidateEventArgs args)
{
if ((string.IsNullOrEmpty(txtUserName.Text)) || (txtUserName.Text.Length > 10))
{
args.IsValid = false;
}
else
{
args.IsValid = true;
}
}
</script>
<body>
<form id="Form1" runat="server">
UserName:<asp:TextBox ID="txtUserName" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="错误信息" ControlToValidate="txtUserName"
ClientValidationFunction="ClientValidateUserName" ValidateEmptyText="True"></asp:CustomValidator>
<asp:Button ID="btnValid1" runat="server" Text="验证用户名" />
<asp:CheckBoxList ID="cbAgeRangeList" runat="server" Height="36px" Width="400px"
RepeatDirection="Vertical">
<asp:ListItem Value="1"><16</asp:ListItem>
<asp:ListItem Value="2">16-22</asp:ListItem>
<asp:ListItem Value="3">22-30</asp:ListItem>
<asp:ListItem Value="4">30-40</asp:ListItem>
<asp:ListItem Value="5">40-50</asp:ListItem>
<asp:ListItem Value="6">50-60</asp:ListItem>
<asp:ListItem Value="6">60-80</asp:ListItem>
<asp:ListItem Value="6">>80</asp:ListItem>
</asp:CheckBoxList>
<asp:CustomValidator ID="CustomValidator2" runat="server" ErrorMessage="请正确选择年龄段"
ClientValidationFunction="CheckCheckBoxList"></asp:CustomValidator>
</form>
</body>
</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. 通示jQuery实例方法,未DOM对象添加多个方法

    <script type="text/javascript"> /* * 通示jQuery实例方法,未DOM对象添加多个方法 * 用按钮做多个事件的调用 */ (fun ...

  2. Android 之 Fagment 完全解析

    Android 上的界面展示都是通过 Activity 实现的,Activity 非常常用,不再赘述.但是 Activity 也有它的局限性,同样的界面在手机上显示可能很好看,在平板上就未必了,因为平 ...

  3. SqlServer和Mysql插入记录前判断是否存在,存在则插入,不存在则修改。

    SqlServer中是这样: ) ,@title,@searchKeys,@serviceIntervalSecond,@sleepMillisecondPerSearch) ELSE UPDATE ...

  4. 如何导入外部Git仓库到中国源代码托管平台(Git@OSC)

    git clone --bare http://git.rcrtm.com/git/dianli.git git clone --mirror https://git.oschina.net/cand ...

  5. Web Worker是什么

    .Web Worker是什么 Web Worker 是HTML5标准的一部分,这一规范定义了一套 API,它允许一段JavaScript程序运行在主线程之外的另外一个线程中.Web Worker 规范 ...

  6. markdown table语法

    普通的表格 | 一个普通标题 | 一个普通标题 | 一个普通标题 | | ------ | ------ | ------ | | 短文本 | 中等文本 | 稍微长一点的文本 | | 稍微长一点的文本 ...

  7. Markdown中实时显示数学公式的方法

    Markdown中实时显示数学公式的方法 Markdown非常好用,但是对于数学公式的实时显示有一些缺陷,如何解决这一问题呢? 一.在线LaTex编辑 点击在线LaTeX编辑方式 在对话框中输入数学公 ...

  8. Android学习笔记一:项目目录结构

    一:Android目录 主要内容有: app目录下: manifests目录: AndroidManifest.xml:APP的配置 java目录:主要为源代码和测试代码 res目录:主要是资源文件, ...

  9. Java多线程之CountDownLatch和CyclicBarrier同步屏障的使用

      转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6558349.html  一:CountDownLatch CountDownLatch是一个执行 完成任务 ...

  10. Java远程方法协议(JRMP)

    Java远程方法协议(英语:Java Remote Method Protocol,JRMP)是特定于Java技术的.用于查找和引用远程对象的协议.这是运行在Java远程方法调用(RMI)之下.TCP ...