Как переписать ErrorMessage для элемента управления CustomValidator на клиенте? - PullRequest
6 голосов
/ 05 августа 2009

У меня есть 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 переписывается сразу после вызова этой функции в его значение по умолчанию. Как я могу изменить значение сообщения об ошибке и заставить его «залипать»?

Ответы [ 9 ]

4 голосов
/ 10 ноября 2011
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". У меня это сработало.

3 голосов
/ 13 июня 2012

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

sender.innerHTML = "YOUR HTML WITH ANYTHING COME HERE"
3 голосов
/ 23 ноября 2009

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

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 должно быть заменено именем вашего элемента проверки.

2 голосов
/ 05 августа 2009

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

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

Edit:

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

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

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

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

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

1 голос
/ 28 июля 2010

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

0 голосов
/ 23 сентября 2016

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

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

<asp:CustomValidator ID="cvdPhoneNumber" runat="server" Display="Dynamic" ForeColor="Red" ControlToValidate="txtPhoneNumber" ClientValidationFunction="validatePhoneNumber" ErrorMessage=""  />
0 голосов
/ 01 ноября 2013

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

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

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

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

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

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

0 голосов
/ 21 апреля 2010

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

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

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

* 1006 например *

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

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

0 голосов
/ 05 августа 2009

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

... 
case "North America":
    args.IsValid = validateNAPhoneNumber(cleanNumber);
    if (!args.IsValid) 
        document.getElementById(sender.id).innerText = "* Not a NA Phone #";
    break;
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...