在尝试解决我的问题时我发现了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()。我尝试将每个控件添加到各自的面板中,这也没有区别。
有什么想法吗?
答案 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对象以获得解决方案。