Вызов JavaScript после сбоя валидатора .net - PullRequest
2 голосов
/ 16 сентября 2010

Можно ли вызвать функцию javascript после того, как элемент управления проверки не прошел проверку?

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

Существует недокументированный способ.Это зависит от того, что Microsoft не меняет название своих методов javascript, используемых для проверки на стороне клиента, но, к счастью, это изящно ухудшается, то есть не приведет к краху вашего сайта, если Microsoft что-то изменит.

Как минимум, вам нужно хранитьуказатель на исходную функцию, затем перезаписать функцию, которую вызывает Microsoft.

var pointerToMicrosoftValidator = ValidatorUpdateIsValid;
ValidatorUpdateIsValid = function() {
    pointerToMicrosoftValidator();
    // do something after Microsoft finishes 
}

Поскольку вы хотите делать что-то только в случае неудачной проверки, вам следует проверить, является ли страница действительной после возврата из вызова:

var pointerToMicrosoftValidator = ValidatorUpdateIsValid;
ValidatorUpdateIsValid = function() {
    pointerToMicrosoftValidator();
    if (Page_IsValid) {
        alert("Passed Validation");
    } else {
        alert("Failed Validation");
    }
    // do something after Microsoft finishes 
}

Я обнаружил, что важно проверить, использовался ли валидатор на той странице, на которую я рассчитывал, в случае, если кто-то из моей команды удалил валидатор, не удаляя мой javascript.Поэтому я добавил проверку:

if (window.ValidatorUpdateIsValid) {
    alert("page with validator");
}

Наконец, я хотел убедиться, что моя функция была создана после того, как Microsoft создала их код, поэтому я включил определение в вызов jquery.ready.Затем я могу вызвать метод после проверки, заменив «предупреждение после».Вы должны удалить все предупреждения, прежде чем начать работу с этим.

$(document).ready(function() {
    //intercept microsoftValidator
    if (window.ValidatorUpdateIsValid) {
        alert("page with validator");
        var pointerToMicrosoftValidator = ValidatorUpdateIsValid;
        ValidatorUpdateIsValid = function() {
            alert("before");
            if (window.pointerToMicrosoftValidator) {
                pointerToMicrosoftValidator ();
                if (Page_IsValid) {
                    alert("Passed Validation");
                } else {
                    alert("Failed Validation");
                }
            }
            alert("after");
        }
    }
});
2 голосов
/ 16 сентября 2010

Проверьте статью " Проверка ASP.NET по глубине " из MSDN. Особый интерес представляет Проверка на стороне клиента , которая предоставляет API на стороне клиента. Вы можете использовать свойство isvalid объекта-валидатора, чтобы решить, является ли он действительным или нет. На объекты валидатора (на стороне клиента) можно ссылаться с помощью свойства ClientID элемента управления валидатора на стороне сервера.

Одним из способов достижения желаемого может быть

  1. Отключите проверку ASP.NET, установив для переменной js Page_ValidationActive значение false
  2. Когда происходит постбэк, выполняйте итерацию по всем валидаторам, используя свойство Page_Validators, и проверяйте каждый вызов ValidatorValidate.
  3. Если интересующий валидатор недействителен, тогда вызовите вашу функцию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...