什么导致“无法注销UpdatePanel”错误?

12

我有一个包含UpdatePanel的UserControl,当我将其放在页面上时,会抛出以下错误:

无法注销ID为“ReviewContentUpdatePanel”的UpdatePanel,因为它未向ScriptManager注册。如果UpdatePanel从控件树中移除,然后再次添加,可能会发生此情况,不支持此操作。参数名称:updatePanel

ReviewContentUpdatePanel是UpdatePanel的名称,在代码中未被删除或添加,它存在于aspx页面中并且没有被移除。是否有人遇到过这种情况?


你的页面上是否有包含UserControl的ScriptManager? - tvanfosson
是的,在用户控件上有一个脚本代理。 - Glenn Slaven
1
你能发布代码吗?大多数关于这个错误的参考都涉及动态添加updatepanels/控件。用户控件是动态添加的吗? - tvanfosson
不,它只是坐在代码控制面板前。 - Glenn Slaven
没有与UpdatePanel交互的代码。 - Glenn Slaven
显示剩余2条评论
8个回答

5

Clear方法清除包含UpdatePanel的Controls集合,或使用Remove方法删除特定UpdatePanel时,会出现此错误。

对于包含UpdatePanel的控件,CreateChildControls方法的实现可能会触发这些方法。通常情况下,您可以在此方法的顶部调用Controls.Clear(),以便在重复调用此方法时从头开始。


4

您是否在代码中移动控件?如果是,请看看这里,看看是否可以解决您的问题。


我不会在代码中移动任何内容,也没有任何东西与UpdatePanel或其包含的UserControl在代码中互动。 - Glenn Slaven
你能否发布一些示例代码(如果不涉及敏感信息的话)? - DilbertDave
刚来SO!忽略那个 - 我刚看到了其他帖子中的评论。 - DilbertDave

3
希望这能帮助其他人,因为我非常烦恼。在这里和其他地方找到了各种信息碎片后,我最终想出了以下解决方法。注意,我没有在这里或任何其他地方动态创建此更新面板,而大部分相关信息都与动态创建此控件有关,而我并没有这样做。
我在一个使用脚本管理器的主页继承页面中使用了 Web 用户控件内的更新面板。我不知道这个组合是否是原因,但这就是我修复它的方法(在 Web 用户控件内使用更新面板):
protected override void OnInit(EventArgs e)
{
    ScriptManager sm = ScriptManager.GetCurrent(this.Page);
    MethodInfo m = (
    from methods in typeof(ScriptManager).GetMethods(
        BindingFlags.NonPublic | BindingFlags.Instance
        )
    where methods.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel")
    select methods).First<MethodInfo>();

    m.Invoke(sm, new object[] { updatePanel });
    base.OnInit(e);
}

有时候,我需要移除并重新添加一个包含更新面板的用户控件。我调整了我的代码,在重新添加用户控件之后才调用类似这样的方法,结果成功了。非常感谢! - user12861

3

我之前也遇到过这个问题。为了解决它,我只需将其删除,然后重新创建它,问题就会消失。


2
在您的标记中,确保为每个UpdatePanel及其父层次结构中的每个runat="server"控件指定了一个ID。

0

0
你尝试过在用户控件中包含 ScriptManagerProxy 吗?

0
尝试移除UserControl的scriptproxy。在这种情况下,您的页面上只有一个ScriptManager。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接