【问题标题】:UpdatePanel Conditional updatemode not workingUpdatePanel 条件更新模式不起作用
【发布时间】:2011-02-10 04:52:25
【问题描述】:

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

我有 3 个更新面板,每个更新面板在 .js 文件设置中调用一个函数,如下所示:

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

当然,每个人都有不同的 ID。每当控件在更新面板中调用回发时,它就可以工作,但是在 js 文件中我添加了一个 console.log("running the js file") 并且我可以看到它被调用了三次,这意味着它正在刷新所有三个更新面板而不仅仅是一个。

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

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

有什么想法吗?

【问题讨论】:

    标签: asp.net updatepanel


    【解决方案1】:

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

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

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

    MSDN 摘录:

    Application 和 PageRequestManager 类的客户端事件
    Sys.Application.load 事件

    • Sys.Application.add_load(handler);

    在所有脚本完成后引发 加载和所有对象 使用创建的应用程序 $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 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2018-04-09
      • 2020-01-16
      相关资源
      最近更新 更多