GetCallbackEventReference запускает валидаторы - как отключить его

У нас есть серверный элемент управления, который наследуется от CompositeControl и реализует IPostBackDataHandler, ICallbackEventHandler.

Когда мы запускаем CallBackEvent для элемента управления (используя Page.ClientScript.GetCallbackEventReference(this, "args", "callBack", "context",true)), в асинхронном режиме он выполняет валидаторы страницы, которая не иметь определенную группу ValidationGroup.

Мне нужно избегать этого поведения без необходимости устанавливать ValidationGroup для каждого валидатора на странице, и я стараюсь не делать это с помощью JavaScript (я знаю, что мог отключить валидаторы до callbackevent, но я не хочу попасть).

Я также пытался реализовать IButtonControl, чтобы иметь свойство CausesValidation и установить его в false, но это не сработало.

У кого-нибудь есть идеи по этому вопросу?

Заранее спасибо!!

Себастьян.

1 ответ

Решение

Я нашел обходной путь в коде сервера, чтобы отключить валидаторы, не влияя на поведение страницы.

В событии LoadPostData элемента управления я отключаю каждый валидатор страницы, если обратный вызов поступает из элемента управления. И я понимаю, что это не влияет на поведение, поскольку реальное состояние (свойство enable) валидатора не изменяется. Что я имею в виду: если я делаю обратный вызов, где я отключил все валидаторы, чтобы они не запускались, а затем я делаю обратную передачу, валидаторы все еще работают должным образом (если они были включены до предыдущего обратного вызова)

Код, который я использовал:

public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
    {
        if (postCollection["__CALLBACKID"] == this.UniqueID)
            foreach (IValidator validator in Page.Validators)
                    (validator as WebControl).Enabled = false;
    }

Я использую "_ CALLBACKID", чтобы проверить источник обратного вызова, потому что "postCollection [" _EVENTTARGET "]" имеет значение null, поскольку мы находимся в обратном вызове, а не в обратной передаче

Другие вопросы по тегам