【问题标题】:jquery updatepanel losing bindings + suggested fix = reeealllly slooooow resuuuultjquery updatepanel 丢失绑定 + 建议修复 = reeealllly slooooow resuuuult
【发布时间】:2026-02-12 19:55:02
【问题描述】:

因此,在 google/SO 上搜索时,在 asp.net updatepanel 更新中丢失 jquery 绑定的这个已知问题有很多细节。

有一些建议的解决方案。这是我设置初始 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 秒。

有什么想法吗?

【问题讨论】:

    标签: jquery asp.net performance updatepanel


    【解决方案1】:

    我不确定这是否能解决您的问题,但 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 控件的 ID。

    【讨论】:

    • 让 pageLoad 方法正常工作,但速度相同。它必须是页面上的其他内容,因为 .net 元素以毫秒为单位执行,但在渲染时,每次刷新更新面板需要 3-4 秒。
    • 这里奇怪的是,在初始加载时,在我添加 jquery 轮播之前,这个更新面板加载得非常快,更新处理得非常快。现在有了这个轮播,它最初渲染得非常快,但随后失去了绑定并停止工作。添加 pageLoad 方法会对绑定进行排序,但更新面板会变慢。