1

在验证之前,我修剪arguments.Value. 如果验证失败,我想将修剪后的值放回输入。更改arguments.Value没有效果。Sender(中的第一个参数ClientValidationFunction)是验证控制消息布局,而不是原始输入。

我看到了唯一的方法:通过 id、名称或类手动搜索输入元素,但它让我 ClientValidationFunction知道某些输入,我必须ClientID为我的输入设置或唯一的类。

4

1 回答 1

0

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函数的一些修改版本。如果您处理其中嵌套了输入控件的用户控件,则需要递归。

于 2013-07-13T07:39:05.970 回答