GetCallbackEventReference запускает валидаторы - как это отключить - PullRequest
2 голосов
/ 23 декабря 2010

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

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

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

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

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

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

Себастьян.

1 Ответ

0 голосов
/ 29 декабря 2010

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

В событии 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 "]" равен нулюмы в обратном вызове, а не в обратном вызове

...