CustomValidator的ClientValidationFunction:有没有办法将修剪后的值设置回输入?

时间:2013-07-11 06:11:11

标签: webforms

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

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

1 个答案:

答案 0 :(得分:0)

作为客户端验证函数的val参数传递的Validator对象具有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函数的位修改版本。如果您处理输入控件嵌套在其中的用户控件,则需要递归。