CustomValidator控件用法

简介:
虽然大部分时间一直从事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  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" > &lt; 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" > &gt; 80 </ asp:ListItem >
  
</ asp:CheckBoxList >
  
< asp:customvalidator  id ="CustomValidator2"  runat ="server"  
ErrorMessage
="请正确选择年龄段"  ClientValidationFunction ="CheckCheckBoxList" ></ asp:customvalidator >
</ form >
</ body >
</ html >
运行结果:

















本文转自周金桥51CTO博客,原文链接:http://blog.51cto.com/zhoufoxcn/167014 ,如需转载请自行联系原作者


相关文章
|
10天前
|
数据采集 人工智能 安全
|
6天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
320 164
|
5天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
324 155
|
6天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
383 4
|
13天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
918 7