Dotlab – Development and other evil things


Telerik: „Error creating Control“ in Visual Studio 2008

Veröffentlicht in 1 von dotlab am November 6, 2009
Tags: , , ,

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

Veröffentlicht in Allgemein von dotlab am August 28, 2009
Tags: , ,

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

Veröffentlicht in Allgemein von dotlab am August 27, 2009
Tags: , , , ,

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

Veröffentlicht in .net Stuff von dotlab am Februar 27, 2008
Tags: , , , ,

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!