我有场景,我在页面上有两个更新面板(两者都有更新模式='条件')。如果我更新一个更新面板,另一个会自动更新。这是第一个问题。
我正在使用 UpdatePanelAnimationExtender 。如果更新了一个更新面板,那个没有updatepanelAnimationExtender的另一个也更新了,并且有updatepanelAnimationExtender,OnUpdatingUpdatePanel();事件被解雇了。 正如updatepanelAnimationExtender的文档所说: http://www.asp.net/AJAX/AjaxControlToolkit/Samples/UpdatePanelAnimation/UpdatePanelAnimation.aspx
OnUpdating - 在任何UpdatePanel
开始更新时播放的通用动画
OnUpdated - UpdatePanel
完成更新后播放的通用动画(但仅在UpdatePanel
更改后才会播放)
问题: OnUpdating
已解雇并且后端工作但未完成,因为onUpdated
仅在UpdatePanel
更改
答案 0 :(得分:1)
“在页面上添加2更新面板,为两者设置updatemode ='conditional',并为updatepanel添加load事件,并为load事件和添加1按钮设置断点,然后在1更新面板上添加按钮单击按钮的Asyn触发器。 ...你会注意到当你点击按钮时,它应该只加载触发的更新面板而第二个保持不变,但是第二个updatepanel也是加载事件也被触发了“
仅当按钮位于2'nd updatepanel内时才会发生这种情况?如果没有,那么我认为它不会更新第二个更新面板。你能否确认按钮是在第二个更新面板的内部还是外部?
答案 1 :(得分:0)
我刚才有同样的问题。同一页面上的两个更新面板未嵌套且具有UpdateMode =“Conditional”。只要意识到当页面上的一个更新面板触发部分回发时,所有更新面板都将触发更新事件。如果您将UpdatePanelAnimationExtender连接到UpdatePanel A,并且为不相关的UpdatePanel B触发了部分回发,则两者都将触发更新事件,UpdatePanel A的动画将仅运行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();
我希望这有助于某人。