Как получить идентификатор Updatepanel, который собирается начать обратную передачу - PullRequest
1 голос
/ 10 августа 2011

Мне нужно получить идентификатор панели, которая собирается запустить постбэк, поэтому у меня есть общий способ заблокировать пользовательский интерфейс на этой панели.

Пока у меня есть эта функция:

function BeginRequestHandler(sender, args) {
    $('#' + args.get_updatePanelsToUpdate()[0]).block({ message: null }); 
}

прикреплено так:

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);

это очень хорошо работает для получения идентификатора, если элемент управления, который вызывает частичную обратную передачу, находится внутри панели обновления, но если он находится снаружи (с помощью триггера), аргументы.get_updatePanelsToUpdate () всегда имеет значение null

Я видел этот ответ, но он не будет работать в Forme, потому что функция запускается после частичной обратной передачи, она мне нужна раньше ..

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

Итак, вот что я сделал:

создано 2 функции для блокировки (при начале частичной обратной передачи) и разблокирования (при частичной обратной передаче):

    function BeginRequestHandler(sender, args) {
          $('#' +sender._postBackSettings.panelsToUpdate[0].ReplaceAll('$', '_')).block({ message: 'loading...' }); 
    }
    function EndRequestHandler(sender, args) {        
          $('#' + sender._postBackSettings.panelsToUpdate[0].ReplaceAll('$', '_')).unblock();
    }

Зарегистрированные выше функции на моей странице сразу после моего менеджера скриптов:

  <script type="text/javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
    </script>

Некоторые условия:

  • Я использую плагин jquery UI block , но вы должны использовать то, что лучше соответствует вашим потребностям.
  • Вы обновляете панели должны иметь ClientIDMode = "AutoID", если вы используете .NET 4.0 +
  • Я использовал следующую вспомогательную функцию, потому что js не может полностью заменить все и работать с asp net autoID:

    String.prototype.ReplaceAll = function (stringToFind, stringToReplace) { var temp = this; var index = temp.indexOf (stringToFind); while (index! = -1) { temp = temp.replace (stringToFind, stringToReplace); index = temp.indexOf (stringToFind); } вернуть темп; }

0 голосов
/ 10 августа 2011

Если вы просто хотите отключить (или анимировать каким-либо другим способом) панель обновления, почему бы просто не использовать UpdatePanelAnimation ? Он предоставляет вам следующие хуки (не уверен, что это правильное слово):

OnUpdating - Общая анимация воспроизводится, как при запуске любой UpdatePanel обновление
OnUpdated - Общая анимация, воспроизводимая после UpdatePanel обновление завершено (но только если панель обновления была изменена)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...