Какие элементы управления вызвали Page.IsValid = false? - PullRequest
4 голосов
/ 13 октября 2010

Две вещи:

  1. Можно ли установить свойство Page.IsValid (Is_Valid) через Jquery, чтобы мне не приходилось использовать валидаторы aspx? Насколько я понимаю, свойство IsValid доступно только для чтения?

  2. Когда есть средства проверки, можно ли с помощью Jquery (ofcourse) выяснить, какие элементы управления вызвали сбой проверки? Примером может служить форма с множеством текстовых полей: пользователь нажимает кнопку, и я получаю результаты в сводке проверки. Все отлично и денди. Но я также хочу, чтобы пользователи знали, какие у них элементы управления, изменив фон соответствующего текстового поля, скажем, на красный.

Теперь хаком для этого было бы то, что я вызываю свою собственную функцию JS, которая проверяет все текстовые поля на предмет проверки (снова), а затем меняю css на недействительные, чтобы показать красный. Но я бы подумал, что наверняка должен быть способ идентификации, элементы управления которого не прошли проверку?

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 13 октября 2010

(A) невозможно. Page.IsValid устанавливается проверкой на стороне сервера, и клиент не должен связываться с ним. Проверка на стороне клиента не отправляет обратно, если все равно происходит сбой, поэтому Page.Validate() даже не вызывается в этом случае.

AJAX Control Toolkit достигает (B) путем повторного связывания функций проверки. Вы можете попробовать что-то вроде следующего:

[Отказ от ответственности: я не так хорошо знаком с jQuery (пока), поэтому я буду использовать простой JS. Не стесняйтесь переводить на соответствующие идиомы jQuery.]

for (var i = 0; i < window.Page_Validators.length; ++i) {
    var validator = window.Page_Validators[i];
    validator.__old_evaluationfunction = validator.evaluationfunction;
    validator.evaluationfunction = function(value) {
        var element = validator.controltovalidate;
        if (!validator.__old_evaluationfunction(value)) {
            // Validation failed - turn `element` red, scream at the user, etc.
            return false;
        } else {
            // Validation succeeded - restore `element` to its normal state.
            return true;
        }
    };
}
2 голосов
/ 13 октября 2010

Все средства проверки достоверности выполняют проверку на сервере.Переопределение isvalid = false со стороны клиента может предотвратить только обратную передачу.На стороне сервера и на стороне клиента вы можете перечислять через коллекцию валидаторов, и каждый ctrl имеет свойство IsValid.

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