始终触发 CustomValidator 或 RegularExpressionValidator ClientValidationFunction!





4.00/5 (5投票s)
2005年3月22日

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 中测试过。)
希望对某人有所帮助!