我有一个 ScriptControl ScriptManager )使用JavaScript处理客户端交互和 ICallbackEventHandler 来回交流。所有内容都与页面上控件的一个或多个实例完美地配合使用。我把控制器放在 GridView 但它仍然有效。但是,我把 网格视图 UpdatePanel 现在每当我排序时,每个实例都会出现以下错误:
ScriptControl
ScriptManager
ICallbackEventHandler
GridView
网格视图
UpdatePanel
Sys.InvalidOperationException: Two components with the same id 'GridView_ctl02_MyControl' can't be added to the application.
有人能告诉我怎么解决这个问题的正确方向吗?我想 脚本管理器 不是在处理旧的 Sys.UI.Control $create() 同一身份的新的。我想 更新面板 / 脚本管理器 组合会自动处理要替换的对象吗?
脚本管理器
Sys.UI.Control
$create()
更新面板
编辑: 这一页似乎支持我的想法: http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerdispose.aspx
使用RegisterDispose方法 为控件注册释放脚本 在UpdatePanel中 控制。异步时 回发,UpdatePanel控件可以是 更新、删除或创建。 当 面板已更新或删除,任何 释放已注册的脚本 对于位于 页面开发场景,您不需要 必须调用RegisterDispose 方法。
alert("dispose " + this.element.id) 在我的JavaScript中 dispose() 功能。每个实例警报 dispose GridView_ctl02_MyControl GridView_ctl02_MyControl . 我不知所措。。。
alert("dispose " + this.element.id)
dispose()
dispose GridView_ctl02_MyControl
GridView_ctl02_MyControl
当页面卸载时,我的组件 dispose() 方法被调用并且 Sys.Application.removeComponent() 也叫。当 UpdatePanel 处置() 方法被调用。现在我已经解决了这个问题 Sys.Application.removeComponent(this); 处置() . 我没有找到诸如$remove(类似于$create)这样的快捷方式,这意味着您不需要经常使用它。
Sys.Application.removeComponent()
处置()
Sys.Application.removeComponent(this);
如果我离这里很远,有更好的方法,请告诉我!