65.9K
CodeProject 正在变化。 阅读更多。
Home

始终触发 CustomValidator 或 RegularExpressionValidator ClientValidationFunction!

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (5投票s)

2005年3月22日

viewsIcon

65830

重写 WebUIValidation.js 函数,以便即使字段为空时也能触发自定义或正则表达式验证器。

引言

你是否曾经使用过自定义或必填字段验证器,却发现当字段为空时它们不会触发?这个简单的“技巧”将允许你即使在字段为空时也能触发 clientvalidationfunction 或评估正则表达式。

在页面的底部(你可以使用 Page.RegisterStartupScript 来实现),添加以下两个函数

<script language="javascript">

//OVERRIDE THE NORMAL VALIDATOR FRAMEWORK
function CustomValidatorEvaluateIsValid(val) {
    var value = "";
    if (typeof(val.controltovalidate) == "string") {
        value = ValidatorGetValue(val.controltovalidate);
        //make it fire always
        //if (ValidatorTrim(value).length == 0)
        //    return true;
    }
    var args = { Value:value, IsValid:true };
    if (typeof(val.clientvalidationfunction) == "string") {
        eval(val.clientvalidationfunction + "(val, args) ;");
    }        
    return args.IsValid;
}
function RegularExpressionValidatorEvaluateIsValid(val) {
    var value = ValidatorGetValue(val.controltovalidate);
    //make it fire always
    //if (ValidatorTrim(value).length == 0)
    //    return true;        
    var rx = new RegExp(val.validationexpression);
    var matches = rx.exec(value);
    return (matches != null && value == matches[0]);
}
</script>

这些函数也存在于 (以我的为例) aspnet_cient\system_web\1_1_4322 文件夹中的 WebUIValidation.js 中,但由于它们是在 WebUIValidation.js 包含标签之后声明的,因此这些函数会被触发,而不是正常的函数。

请注意注释掉的行。你也可以在实际的 WebUIValidation.js 文件中注释掉这些行,但这些文件的更新会覆盖这些更改。这就是我将它们放在 WebForms 底部的理由,使用此功能。(仅在 IE 6.0 中测试过。)

希望对某人有所帮助!

© . All rights reserved.