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