jquery updatepanel потерял привязки + предложенное исправление = reeealllly slooooow resuuuult - PullRequest
0 голосов
/ 03 июня 2011

Таким образом, эта известная проблема с потерями привязок jquery при обновлении панели обновления asp.net содержит много деталей при поиске в Google / SO.

Есть несколько предложенных решений. Вот код, который я имею для начальной настройки карусели jquery.

$(function() {
          $('.carousel-sizes').jcarousel({ scroll: 3 });
          $('.carousel-pics').jcarousel({ scroll: 1 });
      });

Который работает нормально. Как только панель обновления нажата, она ломается, поскольку привязки jquery, очевидно, теряются. Итак, вот исправление, которое я применил.

     if (typeof (Sys) != "undefined") {
          prm = Sys.WebForms.PageRequestManager.getInstance();
          Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequest);
          Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest);
      }


      function InitializeRequest(sender, args) {
      }

      function EndRequest(sender, args) {

          $('.carousel-sizes').jcarousel({ scroll: 3 });
          $('.carousel-pics').jcarousel({ scroll: 1 });
      }

Что работает, но панель обновления теперь необычайно медленная.

Это страница .net 3.5, использующая главную страницу, менеджер сценариев объявляется на главной странице (с параметром EnablePartialRendering на всякий случай равным true) и код javascript на главной странице или на странице содержимого (без разницы медленно на любой странице). Последняя версия Jquery.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>

Я добавил приведенный выше код на главную страницу / страницу с контентом вверху , и он не работает. Добавьте его в конец любой страницы (непосредственно перед закрывающим тегом BODY или закрывающим тегом CONTENT), и это работает, но бесполезно медленно.

Я отладил, и моя страница не делает ничего особенно интенсивного в том, что касается .net, отладка проходит через соответствующие события и затем зависает в течение 3-4 секунд, прежде чем обновляется панель обновления.

Есть идеи?

1 Ответ

0 голосов
/ 03 июня 2011

Я не уверен, что это решит вашу проблему, но ASP.NET предоставляет событие, которое вы можете использовать для привязки обработчиков событий после изменения UpdatePanel. Кроме того, было бы целесообразно определить некоторый контекст для селектора jQuery, чтобы избежать обхода DOM всей вашей страницы. Попробуйте определить следующий метод.

function pageLoad() { 
  var panel = $("#<$= UpdatePanel.ClientID %>");
  $('.carousel-sizes', panel).jcarousel({ scroll: 3 });
  $('.carousel-pics', panel).jcarousel({ scroll: 1 });
} 

Вам нужно изменить UpdatePanel.ClientID на идентификатор вашего элемента управления UpdatePanel.

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