У меня есть ScriptControl
(требуется ScriptManager
) с JavaScript для обработки взаимодействий на стороне клиента и ICallbackEventHandler
для связи туда и обратно. Все отлично работает с одним или несколькими экземплярами элемента управления на странице. Я поместил элемент управления в GridView
с сортировкой, и он все еще работает. Тем не менее, я помещаю GridView
в UpdatePanel
и теперь всякий раз, когда сортирую, я получаю следующую ошибку для каждого экземпляра:
Sys.InvalidOperationException: Two components with the same id 'GridView_ctl02_MyControl' can't be added to the application.
Может кто-нибудь указать мне правильное направление, как решить эту проблему? Я предполагаю, что ScriptManager
не удаляет старые Sys.UI.Control
объекты, прежде чем пытаться $create()
новые объекты с тем же идентификатором. Я думал, что комбинация UpdatePanel
/ ScriptManager
автоматически позаботится об утилизации предметов, которые будут заменены?
Редактировать: Эта страница, кажется, поддерживает то, что я думал: http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerdispose.aspx
Используйте метод RegisterDispose для
зарегистрировать сценарии утилизации для элементов управления
которые находятся внутри UpdatePanel
контроль. Во время асинхронного
postbacks, элементы управления UpdatePanel могут быть
обновлен, удален или создан. Когда
Панель обновлена или удалена, любая
распоряжаться сценариями, которые зарегистрированы
для элементов управления, которые находятся внутри
UpdatePanel называются. В типичном
сценарии разработки страниц, вы не
должен вызвать RegisterDispose
способ.
Просто для двойной проверки я поместил alert("dispose " + this.element.id)
внутри своей функции JavaScript dispose()
. Каждый экземпляр оповещает dispose GridView_ctl02_MyControl
, но после этого я получаю сообщение о том, что два компонента не могут иметь одинаковое имя GridView_ctl02_MyControl
. Я в растерянности ...