AjaxControlToolkit, CalendarExtender e strana eccezione …
Ajax Control Toolkit consiste in un pacchetto di controlli per ASP.NET+AJAX molto, ma molto, ma molto utile.
Tra i controlli che spesso utilizzo vi è il Calendar Extender, in grado di visualizzare un calendar Ajax per la selezione di una data, agganciandolo ad esempio ad un evento “onclick” di una Texbox o di un Linkbutton.
Utilizzando la suddetta libreria ( AjaxControlToolkit.dll versione 3.5.40412.2) è capitato proprio oggi questo tipo di errore:
Errore server nell’applicazione ‘/’.
Impossibile modificare l’insieme Controls perché il controllo contiene blocchi di codice (ossia <% … %>).
Descrizione: Eccezione non gestita durante l’esecuzione della richiesta Web corrente. Per ulteriori informazioni sull’errore e sul suo punto di origine nel codice, vedere l’analisi dello stack.
Dettagli eccezione: System.Web.HttpException: Impossibile modificare l’insieme Controls perché il controllo contiene blocchi di codice (ossia <% … %>).
Errore nel codice sorgente:
Durante l'esecuzione della richiesta Web corrente è stata generata un'eccezione non gestita. Per informazioni sull'origine e la posizione dell'eccezione, vedere l'analisi dello stack dell'eccezione riportata di seguito.Analisi dello stack:
[HttpException (0x80004005): Impossibile modificare l'insieme Controls perché il controllo contiene blocchi di codice (ossia <% ... %>).] System.Web.UI.ControlCollection.Add(Control child) +8678391 AjaxControlToolkit.ScriptObjectBuilder.RegisterCssReferences(Control control) +687 AjaxControlToolkit.ExtenderControlBase.OnLoad(EventArgs e) +62 System.Web.UI.Control.LoadRecursive() +50 System.Web.UI.Control.LoadRecursive() +141 System.Web.UI.Control.LoadRecursive() +141 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
Informazioni di versione: Versione di Microsoft .NET Framework:2.0.50727.4200; Versione di ASP.NET:2.0.50727.4205
Strano. Un errore che apparentemente non ha nulla a che vedere con il CalendarExtender, ma che compare proprio quando viene agganciato il CalendarExtender ad una TextBox, e scompare quando l’Extender viene rimosso.
Mamma Google dice che come al solito, non sono il solo:
http://forums.asp.net/p/1172295/1965060.aspx
I found that moving the javascript with the embedded <% %> tags from the head to the form tag fixes this error
In effetti la pagina ASP.NET su cui sto lavorando utilizza tags embedded <% %> al posto di ClientID statici.
Proviamo un po’ … Eureka!
Spostando la parte di codice dalla <head> alla <form> tag, l’errore scompare, ed il calendar funziona perfettamente.
Più avanti parlerò più approfonditamente di quali controlli del pacchetto Ajax Control Toolkit sono solito utilizzare.
Perfetto! Grazie mille