在验证之前,我修剪arguments.Value
. 如果验证失败,我想将修剪后的值放回输入。更改arguments.Value
没有效果。Sender
(中的第一个参数ClientValidationFunction
)是验证控制消息布局,而不是原始输入。
我看到了唯一的方法:通过 id、名称或类手动搜索输入元素,但它让我 ClientValidationFunction
知道某些输入,我必须ClientID
为我的输入设置或唯一的类。
在验证之前,我修剪arguments.Value
. 如果验证失败,我想将修剪后的值放回输入。更改arguments.Value
没有效果。Sender
(中的第一个参数ClientValidationFunction
)是验证控制消息布局,而不是原始输入。
我看到了唯一的方法:通过 id、名称或类手动搜索输入元素,但它让我 ClientValidationFunction
知道某些输入,我必须ClientID
为我的输入设置或唯一的类。
val
作为客户端验证函数的参数传递的验证器对象具有controltovalidate
保存服务器控件的唯一 ID 的字段(在 的ControlToValidate
属性中指定CustomValidator
)。因此,您可以轻松地将值设置回您的控件,如下所示:
function trimAndSetBack(val, args) {
// val.controltovalidate will always hold unique id
// of the server control so document.getElementById will work always
ValidatorSetValue(val.controltovalidate, ValidatorTrim(eventArgs.Value));
}
function ValidatorSetValue(id, value) {
var control;
control = document.getElementById(id);
if (typeof (control.value) == "string" && (control.type != "radio" || control.checked == true)) {
control.value = value;
return true;
}
var i;
for (i = 0; i < control.childNodes.length; i++) {
if (ValidatorSetValue(control.childNodes[i], value)) {
return true;
}
}
return false;
}
ValidatorSetValue
是标准ValidatorGetValueRecursive
函数的一些修改版本。如果您处理其中嵌套了输入控件的用户控件,则需要递归。