2009-07-24 96 views
3

我有场景,我有两个更新面板在页面上(都有更新模式='条件')。如果我更新一个更新面板,另一个会自动更新。这是第一个问题。更新了一个更新面板,另一个更新了?

我使用UpdatePanelAnimationExtender。如果一个更新面板被更新,那么没有updatepanelAnimationExtender另一个更新并且具有updatepanelAnimationExtender,OnUpdatingUpdatePanel();事件被解雇。 作为updatepanelAnimationExtender的文件说: http://www.asp.net/AJAX/AjaxControlToolkit/Samples/UpdatePanelAnimation/UpdatePanelAnimation.aspx

OnUpdating - 通用播放的动画当任何UpdatePanel开始更新

OnUpdated - 在UpdatePanel后发挥一般动画已经完成更新(但前提是UpdatePanel被改变)

问题:OnUpdating解雇和它wor糟透了后端,而不是结束,因为onUpdated只有发射时的UpdatePanel改变

+0

更新面板如何相互关联?那是一个嵌套在另一个里面吗?什么是ChildrenAsTriggers设置在每个设置? – drs9222 2009-07-24 23:17:24

回答

1

“添加第2页更新面板,设置的UpdateMode =‘条件’两个及两个UpdatePanel的负载添加事件和两个负载事件设置断点,并添加1按钮,然后添加ASYN触发1个更新面板上的按钮,点击....你会发现当你打按钮,它应该只装载触发更新面板和第二届一个保持不变,但第二个UpdatePanel的是加载事件也炒鱿鱼”

只有当按钮位于第二个更新面板内时才会发生这种情况?如果没有,那么我不认为它会更新第二个更新面板。你能否确认按钮是在第二个更新面板之内还是之外?

0

我只是有这个同样的问题。在同一页面上的两个更新面板不嵌套并且具有UpdateMode =“有条件”。只要认识到,当页面上的一个更新面板触发部分回发时,所有更新面板都将触发更新事件。如果你迷上了UpdatePanel的A中的UpdatePanelAnimationExtender和部分回发触发无关的UpdatePanel B,都将得到更新事件触发,并为UpdatePanel的一个动画将只运行OnUpdating一部分,而不是OnUpdated部分(所以基本上动画将运行一半)。

这是我如何修复了这个问题: 确定哪些更新面板被触发。这可以通过获取脚本管理器的表单变量的值来找到。问题中的更新面板将在字符串中提及。使用此信息根据您的需求执行操作。

// Variable to hold ScriptManager. Just slap this in the class for the page. 
private ScriptManager scriptManager; 

// Get the ScriptManager. Put this in Page_Init handler. 
// If you have the ScriptManager on the same page, just refer to it directly. 
// If you have it on the master page, you can get a reference to it like so. 
// The second line shows one way you can get a reference to the ScriptManager from 
// a user control. 
// FYI, the same code applies to a ToolkitScriptManager. 
scriptManager = ScriptManager.GetCurrent(this); 
// scriptManager = ScriptManager.GetCurrent(HttpContext.Current.Handler as Page); 

// This function checks whether an UpdatePanel is being updated 
private Boolean IsUpdatePanelUpdating(String sUPID) 
{ 
    String sUpdateValue = Request.Form[Request.Form.AllKeys.Where(s => s.EndsWith(scriptManager.ClientID)).FirstOrDefault()] ?? String.Empty; 
    return sUpdateValue.Contains(sUPID); 
} 

// This is code you can put somewhere (say within OnLoad handler) to make an 
// UpdatePanel A get updated even if an unrelated UpdatePanel B is currently being 
// updated. 
if (!IsUpdatePanelUpdating(upA.ClientID)) 
    upA.Update(); 

我希望这可以帮助别人。