J'ai un ScriptControl
(nécessite ScriptManager
) avec JavaScript pour gérer les interactions côté client et ICallbackEventHandler
pour communiquer dans les deux sens. Tout fonctionne parfaitement avec une ou plusieurs instances du contrôle sur une page. J'ai placé le contrôle à l'intérieur d'un GridView
avec le tri et cela fonctionne toujours. Cependant, je place le GridView
dans un UpdatePanel
et maintenant chaque fois que je sorte, je reçois l'erreur suivante pour chaque instance:ScriptControl inside UpdatePanel
Sys.InvalidOperationException: Two components with the same id 'GridView_ctl02_MyControl' can't be added to the application.
me point que quelqu'un peut dans la bonne direction sur la façon de résoudre ce problème? Je suppose que ScriptManager
ne se débarrasse pas des anciens objets Sys.UI.Control
avant d'essayer de $create()
les nouveaux avec le même ID. Je pensais que la combinaison UpdatePanel
/ScriptManager
prendrait automatiquement soin d'éliminer les objets qui seraient remplacés?
Edit: Cette page semble appuyer ce que je pensais: http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerdispose.aspx
Utilisez la méthode RegisterDispose pour registre disposer des scripts pour les contrôles qui sont à l'intérieur d'un contrôle UpdatePanel . Au cours des publications asynchrones , les contrôles UpdatePanel peuvent être mis à jour, supprimés ou créés. Lorsqu'un panneau est mis à jour ou supprimé, tous les scripts d'élimination qui sont enregistrés pour les contrôles qui se trouvent dans le UpdatePanel sont appelés. Dans les scénarios de développement de page typiques, vous ne devez pas appeler la méthode RegisterDispose .
Juste pour vérifier que je placé un alert("dispose " + this.element.id)
dans ma fonction JavaScript dispose()
. Chaque instance unique alerte dispose GridView_ctl02_MyControl
, mais après j'obtiens l'erreur que deux composants ne peuvent pas avoir le même nom GridView_ctl02_MyControl
. Je suis à perte ...