Как я могу переписать ErrorMessage для элемента управления CustomValidator на клиенте?

У меня есть CustomValidator, который проверяет номер телефона для нескольких разных схем телефонной нумерации. Клиентский javascript выглядит так:

validatePhoneNumber(sender, args) {
    cleanNumber = args.Value.replace(/\D/, "");
    country = $("#" + CountryID).get(0).value;
    switch (country) {
        case "North America":
            args.IsValid = validateNAPhoneNumber(cleanNumber);
            if (!args.IsValid) sender.errormessage = "* Not a NA Phone #";
            break;
        case "UK":
            args.IsValid = validateUKPhoneNumber(cleanumber);
            if (!args.IsValid) sender.errormessage = "* Not a UK Phone #";
            break;
...
    }
}

Фактическая проверка выполняется правильно, и CustomValidator всегда имеет правильное свойство IsValid. Однако сообщение sender.errormessage кажется переписанным сразу после вызова этой функции до значения по умолчанию. Как я могу изменить значение сообщения об ошибке и сделать его «прилипающим»?


person Dustman    schedule 04.08.2009    source источник


Ответы (9)


function dateofbirth(sender, args) {

    var dtcDOB = document.getElementById('<%= dtcDOB.ClientID %>');

    var dob = new Date(dtcDOB.value);
    var currDate = new Date();

    if (dtcDOB.value == "") {
        args.IsValid = false;
        sender.textContent = "Provide DOB.";
        return;
    }

    args.IsValid = true;
}

Попробуйте sender.textContent = "your err msg". Это сработало для меня.

person Nik    schedule 10.11.2011

Лучший способ изменить сообщение об ошибке элемента управления валидатора с изображением:

sender.innerHTML = "YOUR HTML WITH ANYTHING COME HERE"
person Satyavir Yadav    schedule 13.06.2012
comment
Обратите внимание, что если сообщение об ошибке является динамическим, может быть внедрен HTML. Используйте textContent, если вы не хотите, чтобы отображался HTML. - person mbomb007; 06.10.2016

Чтобы изменить сообщение об ошибке, сделайте следующее:

if (!args.IsValid) document.getElementById('<%= cstPhoneNumber.ClientID %>').errormessage = "* Not a NA Phone #";

Чтобы изменить текст, сделайте следующее:

if (!args.IsValid) document.getElementById('<%= cstPhoneNumber.ClientID %>').innerHTML = "* Not a NA Phone #";

cstPhoneNumber следует заменить именем вашего элемента управления проверкой.

person Andy West    schedule 22.11.2009

Похоже, вы используете jquery, поэтому вы можете установить сообщение об ошибке следующим образом:

$(sender).text("* Not a NA Phone #");

Редактировать:

Извините за задержку, но я был в отпуске.

Я играл с простой страницей и думаю, что понимаю, как это работает.

Когда вы устанавливаете сообщение об ошибке для отправителя в функции проверки на стороне клиента, вы устанавливаете эквивалент ErrorMessage. Это отличается от текста имущество. ErrorMessage устанавливает текст, отображаемый в сводке проверки, а Text — это текст, отображаемый в элементе управления валидатором. Обратите внимание, что если вы установите только ErrorMessage (на сервере), затем ErrorMessage будет скопировано в ссылку Текст.

Это означает, что когда вы устанавливаете sender.errormessage, вы фактически устанавливаете текст, отображаемый в сводке проверки.

Надеюсь, это поможет прояснить ситуацию. Однако я до сих пор не нашел способа изменить Text из функции проверки на стороне клиента. Я также не уверен, почему ваш объект отправителя не является объектом проверки.

person drs9222    schedule 05.08.2009
comment
Пробовал так, но нет. Покопавшись, я обнаружил, что отправителем является не элемент span, а какой-то другой объект DOM, который ничего не отображает. Спасибо хоть. - person Dustman; 05.08.2009
comment
Странно, когда я пробовал это дома, отправителем был диапазон. Как объект-отправитель был связан с диапазоном? Вы можете получить доступ к диапазону от отправителя. Если нет, у вас есть способ получить идентификатор диапазона в вашем скрипте? Если это так, вы все еще можете это сделать. Извините, я не могу быть более полезным в данный момент, так как я на работе. - person drs9222; 05.08.2009
comment
На ряде веб-сайтов утверждается, что конструкция sender.errormessage является способом сделать это, поэтому я подозреваю, что сделал что-то неправильное в более широкой схеме вещей, которая мешает любому из этих методов работать. Думаю, мне придется написать тестовую страницу и посмотреть, не будет ли более простая версия работать так, как все ожидают. - person Dustman; 05.08.2009

sender.innerText = "Your message" будет работать.

person Karthik    schedule 28.07.2010

Я думаю, проблема в том, что на стороне клиента нет свойства errormessage. Пользовательский валидатор отображает тег <span> для отображения сообщения об ошибке с идентификатором, соответствующим свойству id пользовательского элемента управления валидатора. Чтобы установить текст, отображаемый при сбое проверки, вам нужно сделать что-то вроде этого.

... 
case "North America":
    args.IsValid = validateNAPhoneNumber(cleanNumber);
    if (!args.IsValid) 
        document.getElementById(sender.id).innerText = "* Not a NA Phone #";
    break;
...
person Phaedrus    schedule 05.08.2009
comment
Разве document.getElementById(sender.id) не равно sender? - person drs9222; 05.08.2009
comment
Собственно, так я и начал это делать, и это тоже не сработало. Как это бывает, член js sender.errormessage имеет то же содержимое, что и CustomValidator.ErrorMessage при первой загрузке страницы, но изменение этого содержимого не изменяет отображаемое сообщение. - person Dustman; 05.08.2009

Просто удалите все экземпляры Text и ErrorMessage в определениях пользовательских тегов проверки, а затем используйте

$(#id_of_custom_validation_control).text("custom error message");

Затем с этим вы можете использовать один настраиваемый элемент управления валидатором и обрабатывать несколько условий ошибки.

E.g

if(error1){
  $(#id_of_custom_validation_control).text("custom error message1");
}else $(#id_of_custom_validation_control).text("custom error message2");

Надеюсь это поможет

person D0cNet    schedule 21.04.2010

Расширение ответа @Andy с помощью jQuery:

Изменить текст сообщения (показать в форме):

$('#<%=this.[Validator].ClientID%>').text('Text to show');

Измените сообщение об ошибке (для элемента управления «Сводка»):

$('#<%=this.[Validator].ClientID%>').attr('errormessage', 'Text to show');

Замените [Validator] на имя вашего валидатора.

person dchumpitaz    schedule 01.11.2013

Попробуй это...

Используйте sender.textContext в Javascript для сообщения об ошибке и настройте свой CustomValidator следующим образом:

<asp:CustomValidator ID="cvdPhoneNumber" runat="server" Display="Dynamic" ForeColor="Red" ControlToValidate="txtPhoneNumber" ClientValidationFunction="validatePhoneNumber" ErrorMessage=""  />
person LostMoose    schedule 23.09.2016