ASP.NET控件和更新面板

时间:2009-02-19 14:21:49

标签: asp.net events controls updatepanel custom-server-controls

我正在创建一系列嵌套在更新面板中的客户端组件控件。我第一次创建控件时,一切都按预期工作,但是,当我在更新面板上触发更新并且它进行部分回发时,控件会返回几个javascript错误,描述控件是如何在页面上注册的。

我得到了一系列错误,说的是: “错误:Sys.InvalidOperationException:具有相同ID”master_ctl40_CCB_PALETTES“的两个组件无法添加到应用程序”

任何想法?

3 个答案:

答案 0 :(得分:1)

尝试这些技巧:

  1. On Page_Load put uxFailedControl.ID = DateTime.Now.ToString();每次页面重新加载(全部或部分)时,它将确保您的控件具有唯一ID,因此理论上您不应再看到“相同ID”错误。
  2. 如果在模态弹出窗口中显示控件:每次从服务器隐藏弹出窗口时,从其容器中删除控件(面板,页面,控件等)。使用uxModalPopupPanel.Controls.Clear();或uxModalPopupPanel.Remove(uxFailedControl);
  3. 完成调试后,将ScriptManager的ScriptMode属性设置为“Release”。它将阻止内部AJAX异常冒泡到浏览器。

答案 1 :(得分:0)

您在哪种情况下将组件添加到更新面板?即您是否将它们放在页面加载事件中而没有回发检查,或者您是否将它们放在更新面板加载事件中?等...

答案 2 :(得分:0)

看起来您的客户端对象被多次创建。

如果您希望在更新面板刷新时替换客户端控件,则它们应该继承自Sys.UI.Control,后者需要在其构造函数中使用一个元素。当该元素被更新面板替换时,将丢弃客户端对象,然后重新创建。如果您当前正在服务器端使用ScriptComponentDescriptor来定义客户端控件实例,那么您将需要切换到ScriptControlDescriptor。

通过它的声音,您的客户端对象只是从Sys.Component继承,它将一直挂起,直到它们被手动处理,这就是为什么您收到有关具有相同ID的多个组件的错误。

我建议不要在每个帖子中使用新的ID - 这将继续创建新的客户端对象,而不会清理旧的。