Динамически изменять инструментарий ajax ValidatorCalloutExtender - PullRequest
0 голосов
/ 29 июня 2009

Я использую набор инструментов ajax ValidatorCalloutExtender для отображения сообщений об ошибках в текстовом поле. ValidatorCalloutExtender распространяется на RegularExpressionValidator, который проверяет текстовое поле. У меня проблема в том, что мне нужно динамически изменять ValidationExpression и ErrorMessage в зависимости от того, какой элемент раскрывающегося списка был выбран, который связан с текстовым полем. Я был в состоянии успешно сделать это, используя события на стороне клиента и JavaScript, но тогда я не могу получить ValidatorCalloutExtender для обновления ErrorMessage, которое отображается правильно. Больше всего меня смущает то, что это нормально работает в Firefox, но я не могу заставить его работать в любой версии IE. Если кто-нибудь может помочь мне найти способ, чтобы отображаемое сообщение об ошибке изменялось динамически, было бы очень полезно.

1 Ответ

3 голосов
/ 09 июля 2009

Ок, все,

Я выяснил свою собственную проблему и подумал, что могу выложить свои выводы сюда, если другие попытаются сделать что-то похожее на меня.

В javascript я передаю объект regularexpressionvalidator, связанный с текстовым полем, в функцию, которая изменит регулярное выражение и сообщение об ошибке в зависимости от значения в раскрывающемся списке. Если пользователь изменил значение выпадающего списка, я хотел, чтобы validator и ajax validatorcallout обновлялись немедленно и либо сообщали пользователю, что значение в текстовом поле теперь является допустимым или недействительным, но по этой новой причине. Я не говорю, что это лучший способ сделать это, но это способ, который работает для меня, и я хотел сделать это на клиенте.

ниже - код, который я использую, и (val) - объект regularexpressionvalidator, который передается.

function setSearchRegEx(val)
{
    var regExpression = "";
    var valMessage = "Must be in the following format: ";
    var message = "";

    // set regex information depending on what drop down value they select.
    switch (document.getElementByID('ddlValue1.ClientID').value) {
        case "Value1":
            regExpression = "^[a-zA-Z0-9'*\s-]{1,75}$";
            message = valMessage + "[A-Z][0-9]'. #-";
            break;
        case "Value2":
            regExpression = "^\[0-9]{3}-\[0-9]{2}-\[0-9]{4}|\d{9}$";
            message = valMessage + "999-99-9999";
            break;
        case "Value3":
            regExpression = "[a-zA-Z0-9'*\s-]{1,50}$";
            message = valMessage + "[A-Z][0-9]'. #-";
            break;
        case "Valu4":
            regExpression = "^\[0-9]{3}-\[0-9]{3}-\[0-9]{4}$";
            message = valMessage + "999-999-9999";
            break;
        case "Value5":
            regExpression = "^[0-9]{1,10}$";
            message = valMessage + "9999999999";
            break;
        default:
            regExpression = "";
            message = "";
    }
    // set validation control values for the new drop down selected.
    val.validationexpression = regExpression;
    val.errormessage = message;
    val.title = message;

    // fire the validation function to validate what is currently in the textbox
    val.isvalid = val.evaluationfunction(val);
    //call the function to manipulate the UI
    validatorUpdateDisplay(val);
}

function validatorUpdateDisplay(val)
{
    if (val.isvalid) {

        //make the error invisible
        val.display = "none";
    }
    else {

        var browser = navigator.appName;

        //different browsers get updated differently, IE really the only main one to update differently.
        if (browser == "Microsoft Internet Explorer") {
            val.ValidatorCalloutBehavior._errorMessageCell.innerText = val.errormessage;
        }
        else {
            val.ValidatorCalloutBehavior._errorMessageCell.textContent = val.errormessage;
        }

        //make the error visible
        val.display = "inline";
    }          
}

Как вы можете видеть, Internet Explorer работал не так, как остальные браузеры, с которыми я тестировал! Если у кого-то есть лучший способ сделать это, поделитесь, и я надеюсь, что этот ответ поможет некоторым людям!

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...