Szenario
Ein ASP.NET-Ajax-UpdatePanel wird innerhalb eines ASP.NET-Wizard-Steuerelements verwendet. Genauer gesagt innerhalb eines WizardStep-Tags.
Fehlermeldung
Es trat beim Aufruf einer ASPX-Seite mit dieser Konstellation folgende Fehlermeldung auf:
Cannot unregister UpdatePanel with ID ‚myUpdatePanel‘ since it was not registered with the ScriptManager. This might occur if the UpdatePanel was removed from the control tree and later added again, which is not supported.
Parametername: updatePanel
Ursache
Wie ich nach langem Hin-und-her herausgefunden habe war folgender Code die Ursache (ja, Visual Basic.NET, shame on me, der Kunde will das so):
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
MyWizard.DisplaySideBar = False
End Sub
Ich hatte also im Load-Ereignis der Seite, die das Wizard-Steuerelement enthalten hat die DisplaySideBar-Eigenschaft geändert.
Dies hat unmittelbar zu der oben beschriebenen Fehlermeldung geführt. Andere Eigenschaften, wie z.B. ActiveStepIndex, hatten nicht zu dem Fehler geführt und korrekt funktioniert.
Lösung
Eine Lösung die sich für mich als benutzbar erwiesen hat war, dass ich die DisplaySideBar-Eigenschaft deklarativ gesetzt habe. Also direkt im ASPX-Markup.
Das war aber für mich ungeeignet, da ich die Eigenschaft im Design-Modus auf True
haben wollte und nur zur Laufzeit auf False
.
Deshalb habe ich nach etwas längerem Ausprobieren herausgefunden, dass wenn ich die DisplaySideBar-Eigenschaft zu einem „früheren“ Zeitpunkt setze, diese korrekt funktioniert, ohne einen Fehler zu produzieren.
Und zwar im PreRender-Ereignis des Wizard-Steuerelements selbst:
Protected Sub MyWizard_PreRender(ByVal sender As Object, ByVal e As System.EventArgs)
MyWizard.DisplaySideBar = False
End Sub
Damit hat alles wie gewünscht funktioniert.