Telerik: „Error creating Control“ in Visual Studio 2008
Bei jedem Update der Telerik Controls hat sich Visual Studio geweigert, die Controls im Design Mode ordentlich darzustellen. Einfache und notwendige Arbeitsschritte wie beispielsweise das Registrieren eines spezifischen Handlers in web.config wurden dadurch mühsam. Im Netz kursieren recht viele nutzlose Anleitungen zu diesem Thema, nun habe ich aber einen reproduzierbaren Weg gefunden, das Problem zu lösen.
1. Die neuen Telerik Controls downloaden (Scripts + DLL), nach C:\Programme\Telerik\ kopieren
2. In der Toolbox einen neuen Tab hinzufügen, über Choose Items die neuen Controls hinzufügen
3. Neues Projekt erstellen
4. Control aus Toolbox auf Form ziehen
Wenn der Fehler hier auftaucht, wie folgt vorgehen:
1. Solution speichern und Visual Studio schliessen
2. Alle temporären Verzeichnisse und Dateien unter „C:\Windows\Microsoft.NET\Framework\v.2.0.50727\Temporary Asp.net Files\root“ löschen
3. Alle temporären Verzeichnisse und Dateien unter „C:\Users\((username))\AppData\Local\Microsoft\VisualStudio\9.0\ProjectAssemblies“ löschen
4. Visual Studio 2008 starten mit dem vorher angelegten Projekt. Die referenzierte Assembly Telerik.Web.UI entfernen.
5. Die DLL „Telerik.Web.UI.dll“ manuell ins Projekt kopieren und die Assembly zu den Referenzen hinzufügen.
Nun sollte das Problem gelöst sein und im Design Mode das Control richtig angezeigt werden. Startet man nun ein weiteres leeres Projekt, können die Controls aus der Toolbox via Drag&Drop platziert werden ohne Probleme.
Visual Studio 2008 SP1 Intellisense Problem
Ein überaus lästiges Verhalten (tönt irgendwie schöner als „Bug“..) in Visual Studio 2008 SP1 hatte uns das Leben schwer gemacht. In einigen Projekten hat plötzlich die Intellisense Unterstützung komplett versagt, auch das automatische Source-Code Formatieren von Web Forms hat nicht mehr funktioniert. Das Projekt blieb aber zu jedem Zeitpunkt kompilierbar und lief einwandfrei. Im Telerik Blog wurde das Entfernen von diversen temporären Dateien empfohlen, das hat das Problem bei uns aber nicht gelöst. Auch das mehrfache Öffnen und Schliessen oder die Bearbeitung von Forms bei gleichzeitig geöffneter Masterpage hatte keinerlei Effekt.
Die einzige Lösung, die sich auf allen Maschinen bewährt hat: wenn Intellisense nicht mehr funktioniert, einfach ein beliebiges Telerik Control aus der Toolbox auf die Form ziehen. Vorher muss sichergestellt werden, dass der „bin“ Ordner nicht im Projekt inkludiert wurde! Visual Studio 2008 SP1 Intellisense funktionierte danach wieder einwandfrei in allen Forms und Controls. Microsoft sollte dringend einen Hotfix für dieses Problem nachschieben, da es offensichtlich ziemlich viele Entwickler betrifft.
’sys’ undefined mit Telerik AJAX Framework auf IIS7/W2008
Beim Rollout einer kleinen Webapplikation auf einen Windows 2008 Server mit IIS7 funktionierte das client-seitige AJAX Framework nicht, ein Javascript Error ’sys is undefined’ sorgte dafür, dass die App unbrauchbar wurde. Mit dem in VisualStudio 2008 integrierten Development Server klappte alles prima und sämtliche Tests auf allen möglichen Browsern liefen sauber durch.
Ich vermutete ein Problem mit dem Handler und setzte den verwalteten Pipelinemodus des Application Pools im IIS7 auf Classic und voilà: der Fehler tauchte nicht mehr auf. Ein bisschen Recherche im Netz brachte dann die Lösung: im integrierten Modus muss manuell ein verwalteter Handler angelegt werden. Das funktioniert so:
+ Klick auf die App
+ Klich auf Handlerzuordnungen
+ Verwalteten Handler hinzufügen
+ Pfad: Telerik.Web.UI.WebResource.axd
+ Typ: Telerik.Web.UI.WebResource
+ Name: Telerik.Web.UI.WebResource
Nachdem der Handler nun manuell registriert wurde, funktionierte die App reibungslos!
Parameter an Telerik DockableObject Form mit Reflection übergeben
Eine kleine Knacknuss hat sich bei der Verwendung der Telerik Docking Zones (DZ) rsp. Dockable Objects (DO) ergeben. Folgende Situation: drei DZ liegen nebeneinander, alle werden dynamisch mit DO gefüllt. Als ContentTemplate wird für jedes DO ein eigenes Control definiert, welches nach dem Aufklappen des DO eine umfangreiche Editmaske zur Verfügung stellt. Soweit so gut, bloss muss dem Control innerhalb des DO ein Parameter übergeben werden, damit dort die ID des DO zur Verfügung steht. Alles klar?
Der erste Versuch nur über ein Property war nicht von Erfolg gekrönt. Die Lösung heisst: Reflection! Hier ein Vorschlag, wie die Create Methode aussehen könnte:
Function CreateDockableObject(ByVal _Id As Integer, ByVal _Text As String) As RadDockableObject
'create new dockable object
Dim dObj As New RadDockableObject
dObj.ID = _Id
dObj.Text = _Text
dObj.DockingMode = RadDockingModeFlags.AlwaysDock
dObj.Expanded = False
dObj.Width = "250"
'load a user control as a template
Dim myUC As UserControl
myUC = CType(LoadControl("Controls/ModulEdit.ascx"), UserControl)
Dim ucType As Type = myUC.GetType()
'pass a parameter to the user control
Dim ucProperty As Reflection.PropertyInfo = ucType.GetProperty("mId")
ucProperty.SetValue(myUC, _Id, Nothing)
'add user control to dockable object template
dObj.ContentTemplate = myUC
Return dObj
End Function
Natürlich muss im Control ein entsprechendes Property (hier „mId“) vorhanden sein. Ist dies der Fall, funktioniert alles bestens!