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, поскольку мы находимся в обратном вызове, а не в обратной передаче