Есть ли способ отключить UpdateProgress для определенных асинхронных постбэков?

#jquery #asp.net #ajax #visual-studio

#jquery #asp.net #ajax #visual-studio

Вопрос:

У меня есть элемент управления UpdateProgress, который отображается в виде наложения (с использованием CSS) для всех асинхронных событий для панели обновления. Теперь, для определенных событий команды РАЗВЕРНУТЬ / СВЕРНУТЬ строку, я просто не хочу показывать этот updateprogress.

Есть ли способ?

Комментарии:

1. Не видя никакого вашего кода, похоже, вы должны иметь возможность привязать обработчик события к любому событию, вызывающему развертывание / сворачивание. Это событие щелчка? Опубликуйте свой код, пожалуйста.

2. События все в порядке с привязкой, это просто наложение UpdateProgress, которое я не хочу показывать для определенных событий RowCommand для gridview, содержащихся в этой updatepanel

3. 1.) По возможности используйте более одной панели обновления. Элемент управления UpdateProgress имеет свойство AssociatedUpdatePanelID . Задайте идентификатор панели обновления, для которой UpdateProgress отображает статус, и не используйте UpdateProgress-control для панели обновления команд row. 2.) Поиграйте со DisplayAfter свойством, которое указывает, когда будет отображаться UpdateProgress. Возможно, этого уже достаточно. 3.) Запустите UpdateProgress самостоятельно, взгляните на эту ссылку , чтобы ознакомиться с методами.

Ответ №1:

 <script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_initializeRequest(InitializeRequest);

    function InitializeRequest(sender, args) {
        var updateProgress = $get('UpdateProgress1');
        var postBackElement = args.get_postBackElement();
        if (postBackElement.id == '<%= Button1.ClientID %>') {
            updateProgress.control._associatedUpdatePanelId = 'dummyId';
        }
        else{
            updateProgress.control._associatedUpdatePanelId = null;
        }
    }

</script>
  

Комментарии:

1. Превосходно. Хорошо понято и правильный ответ по существу. Спасибо

2. Это работает, как только я настроился на UpdateProgress[0].control._associatedUpdatePanelId

Ответ №2:

Я обнаружил, что это работает для меня, где ответ.Перенаправление предотвращает перезагрузку исходной страницы, и поэтому UpdateProgress не отключается..

В некорректном элементе управления добавить

 OnClientClick="disableProgress()"
  

а затем поместите этот javascript на страницу

 <script type="text/javascript">

function disableProgress() {

var updateProgress = $get('<%=UpdateProgress1.ClientID%>');
var originalID = updateProgress.control._associatedUpdatePanelId;
updateProgress.control._associatedUpdatePanelId = 'dummyId';

setTimeout(function () { updateProgress.control._associatedUpdatePanelId = originalID; }, 1000);

}
</script>
  

Это временно отключает элемент управления UpdateProgress, а затем асинхронно повторно активирует его на стороне клиента через 1 секунду.