0

我正在动态创建一系列嵌套在更新面板内的客户端组件控件。第一次创建控件时,一切正常,但是,当我在更新面板上触发更新并执行部分回发时,控件返回几个 javascript 错误,描述控件是如何在页面上注册的。

我收到一系列错误,类似于:“错误:Sys.InvalidOperationException:无法将具有相同 id “master_ctl40_CCB_PALETTES”的两个组件添加到应用程序中”

有什么想法吗?

4

3 回答 3

1

试试这些技巧:

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

看起来您的客户端对象被创建了不止一次。

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

从它的声音来看,您的客户端对象只是从 Sys.Component 继承,它会一直存在,直到它们被手动处置,这就是为什么您会收到关于拥有多个具有相同 ID 的组件的错误。

我建议不要在每次回帖时都使用新 ID——这只会继续创建新的客户端对象,而不会清理旧的对象。

于 2009-05-26T04:18:59.290 回答
0

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

于 2009-02-19T14:34:16.623 回答