Проблема с постбэками и валидаторами - PullRequest
1 голос
/ 18 февраля 2010

Я использую встроенные валидаторы ASP для нескольких элементов формы. Они работают нормально - если я нажимаю кнопку отправки (Кнопка), проверка происходит без обратной передачи, и ошибки отображаются в ValidationSummary. Когда это происходит, я также хочу вызвать метод в codebehind, который изменяет CSS элементов, переключая их цвет фона на красный, чтобы отражать ошибки. Я пытался вызвать этот метод, используя OnClick и OnClientClick в кнопке submit, но ни один из параметров, похоже, не запускает этот метод - проверка на стороне клиента всегда имеет приоритет, и обратная передача не происходит. Может ли кто-нибудь просветить меня?

РЕДАКТИРОВАТЬ # 1

Использование ссылки orandovs работало нормально для изменения самого элемента, но как насчет его родителя?

Например, в C # я делаю:

foreach (BaseValidator validator in Page.Validators)
{
    Panel panel = validator.Parent as Panel;

    if (!validator.IsValid)
        panel.CssClass = "error";
    else
        panel.CssClass = "normal";
}

Есть ли способ получить родительский элемент управления (который все последовательно являются панелями, поэтому я знаю, что CssClass будет существовать), используя JavaScript? Что-то вроде:

 $("#" + Page_Validators[i].controltovalidate.parent).CssClass("error");

Ответы [ 4 ]

4 голосов
/ 18 февраля 2010

Если проверка на стороне клиента не удалась, сообщение не возвращается, поэтому у вас есть два варианта:

  1. Напишите на стороне клиента javascript, чтобы делать то, что вы хотите.
  2. Настройка проверки для всех валидаторов только на сервере (Set EnableClientScript = "false") (не рекомендуется)

Вы можете выполнить вызов Ajax при неудачной проверке, но это включает в себя код на стороне клиента, поэтому он попадает под опцию 1.

2 голосов
/ 19 февраля 2010

Я предполагаю, что вы используете библиотеку JQuery и используете код JavaScript из этого ответа .

Jquery имеет функцию parent() и addClass(). Документация: родительский , addClass .

Вот модифицированный код для установки класса css родительского элемента:

if (!Page_Validators[i].isvalid) {
   $("#" + Page_Validators[i].controltovalidate).parent().addClass("error");
}
else{
    //Make sure you remove the error class if the error has been fixed
    $("#" + Page_Validators[i].controltovalidate).parent().removeClass("error");
}
1 голос
/ 18 февраля 2010

Проверка на стороне клиента заблокирует обратную передачу. Есть несколько способов сделать это. Если вы действительно хотите, чтобы произошла обратная передача, вы можете поместить ее в панель обновлений и вызвать частичную обратную передачу, которая запустит ваш код. Вы также можете выполнить изменение CSS в javascript и сохранить все на стороне клиента.

1 голос
/ 18 февраля 2010

Почему бы не изменить свойство CssClass объекта или написать некоторый код JavaScript с помощью Response.Write ()

...