在写自定义控件时,如果控件某个属性允许被验证控件验证,需要注意微软在 WebUIValidation.js内的实现。...

微软在WebUIValidation.js(System.Web的资源文件内自己找工具看吧)
内有如下代码:
function  ValidatorGetValue(id) {
    
var  control;
    control 
=  document.getElementById(id);
    
if  ( typeof (control.value)  ==   " string " ) {
        
return  control.value;
    }
    
return  ValidatorGetValueRecursive(control);
}
function  ValidatorGetValueRecursive(control)
{
    
if  ( typeof (control.value)  ==   " string "   &&  (control.type  !=   " radio "   ||  control.checked  ==   true )) {
        
return  control.value;
    }
    
var  i, val;
    
for  (i  =   0 ; i < control.childNodes.length; i ++ ) {
        val 
=  ValidatorGetValueRecursive(control.childNodes[i]);
        
if  (val  !=   "" return  val;
    }
    
return   "" ;
}

当自定义控件为符合控件,比如两个或多个DropDownList组合而成
而有一个Value属性来返回这几个DropDownList的返回选项,并且设置了 ValidationPropertyAttribute去验证某个属性,如:
[ValidationPropertyAttribute( "Value" )]
当使用验证控件验证的时候,由于上面脚本在控件没有客户端value的时候返回的为第一个value不为空的ChildNode的value
值,这样用来验证,可能不是我们所需要的。
比如我需要非空验证控件来验证我的自定义控件所有的DropDownList都必须被选择时候,如果第一个有了选择,则该脚本认为验证通过了,叶面可以PostBack然而,在服务器端Page.IsValidata属性是false的。
我用了一个非常ugly的方法,在控件外层放一个父容器(可以通过override TagKey 来指定)span
在每个DropDownList的客户端onchange的时候 判断 如果 任一个没有选择,那么置span的value = ‘’;
当全部选择的时候再将span.value = 实际的值 ,这样就不会出现客户端验证通过,然而服务器端验证没有通过才出来ErrorMessage的情况了。

但是总觉得 这样非常的ugly,如果有其他朋友也遇到过这样的问题,欢迎讨论。

转载于:https://www.cnblogs.com/huobazi/archive/2006/12/01/CustomWebControlAndWebUIValidationJs.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值