我正在动态创建一系列嵌套在更新面板内的客户端组件控件。第一次创建控件时,一切正常,但是,当我在更新面板上触发更新并执行部分回发时,控件返回几个 javascript 错误,描述控件是如何在页面上注册的。
我收到一系列错误,类似于:“错误:Sys.InvalidOperationException:无法将具有相同 id “master_ctl40_CCB_PALETTES”的两个组件添加到应用程序中”
有什么想法吗?
我正在动态创建一系列嵌套在更新面板内的客户端组件控件。第一次创建控件时,一切正常,但是,当我在更新面板上触发更新并执行部分回发时,控件返回几个 javascript 错误,描述控件是如何在页面上注册的。
我收到一系列错误,类似于:“错误:Sys.InvalidOperationException:无法将具有相同 id “master_ctl40_CCB_PALETTES”的两个组件添加到应用程序中”
有什么想法吗?
试试这些技巧:
看起来您的客户端对象被创建了不止一次。
如果您希望在刷新更新面板时替换您的客户端控件,它们应该从 Sys.UI.Control 继承,后者在其构造函数中采用一个元素。当该元素被更新面板替换时,客户端对象将被释放然后重新创建。如果您当前在服务器端使用 ScriptComponentDescriptor 来定义客户端控件实例,您需要切换到 ScriptControlDescriptor。
从它的声音来看,您的客户端对象只是从 Sys.Component 继承,它会一直存在,直到它们被手动处置,这就是为什么您会收到关于拥有多个具有相同 ID 的组件的错误。
我建议不要在每次回帖时都使用新 ID——这只会继续创建新的客户端对象,而不会清理旧的对象。
在哪种情况下您将组件添加到更新面板?即您是否将它们放置在页面加载事件中而没有进行回发检查,或者您是否将它们放置在更新面板加载事件中?ETC...