UpdatePanel条件更新模式无法正常工作

时间:2011-02-09 20:05:04

标签: asp.net updatepanel

在尝试解决我的问题时我发现了this thread,不幸的是,我似乎无法弄清楚问题,因为我已经拥有应有的一切。

我有3个updatepanel,每个都调用.js文件设置上的函数,如下所示:

<asp:UpdatePanel ID="upPnlGeneralinfo" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
        <ContentTemplate>
        <script type="text/javascript">
            Sys.Application.add_load(BindPageLoad); 
        </script>

每个人当然都有不同的身份证。每当控件在更新面板中调用回发时它都可以工作,但是在js文件中我添加了一个console.log(“运行js文件”),我可以看到它被调用了三次,这意味着所有三个updatepanel都被刷新了而不仅仅是那个。

所有触发器都位于每个相应的更新面板内,所以我不需要添加任何触发器(我只是为了确保它没有区别)。 UpdateMode = Conditional不应该解决这个问题吗?

另外值得一提的是,我后面的代码都没有调用任何updatepanel.update()。我尝试将每个控件添加到各自的面板中,这也没有区别。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这并不一定意味着您的所有更新面板都会被刷新。

MSDN文档说,在同步(整页回发)或异步(部分页面)回发之后会引发客户端加载事件。

这可能意味着只有一个更新面板按预期刷新,但所有三个事件处理程序在异步回发后再次运行,因为它们是如何使用MS Ajax连接的。

MSDN摘录:

  

应用程序和PageRequestManager类的客户端事件
   Sys.Application.load活动

     
      
  • Sys.Application.add_load(处理程序);
  •   
     

在所有脚本完成后引发   加载和中的所有对象   使用创建的应用程序   $ create已初始化。负载   所有回发都会引发事件   服务器,包括   异步回发。
   - http://msdn.microsoft.com/en-us/library/bb386417.aspx

使用部分页面呈现事件表示仅在整个页面加载时运行的其他事件:

  

在普通页面处理期间   浏览器,window.onload DOM事件   在页面首次加载时引发    - http://msdn.microsoft.com/en-us/library/bb398976.aspx

这是常规的DOM加载方法,不属于MS Ajax。

因此我假设您将客户端代码挂钩到常规的 window.onload 事件,那么它将仅在第一次加载整页时运行,而不是在连续的异步回发(即更新)上运行面板/部分刷新)。

这些知识是否可以利用来提供您想要的结果我不确定。当存在混合浏览器/ MS Ajax客户端解决方案时,您可能只关注MS Ajax对象以获得解决方案。