代码之家  ›  专栏  ›  技术社区  ›  Nelson Rothermel

UpdatePanel中的ScriptControl

  •  1
  • Nelson Rothermel  · 技术社区  · 14 年前

    我有一个 ScriptControl ScriptManager )使用JavaScript处理客户端交互和 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() 同一身份的新的。我想 更新面板 / 脚本管理器 组合会自动处理要替换的对象吗?

    编辑: 这一页似乎支持我的想法: 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 . 我不知所措。。。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Nelson Rothermel    14 年前

    当页面卸载时,我的组件 dispose() 方法被调用并且 Sys.Application.removeComponent() 也叫。当 UpdatePanel 处置() 方法被调用。现在我已经解决了这个问题 Sys.Application.removeComponent(this); 处置() . 我没有找到诸如$remove(类似于$create)这样的快捷方式,这意味着您不需要经常使用它。

    如果我离这里很远,有更好的方法,请告诉我!

    推荐文章