Auf dem Weg zur Xtopia

Tuesday, October 09, 2007 6:56:02 PM (W. Europe Daylight Time, UTC+02:00)

Am Mittwoch + Donnerstag bin ich in Berlin auf der Xtopia, der neuen Microsoft Konferenz zu User Experience und Web Design. Ich arbeite dort als "Ask the Experts" (ATE), werde also Fragen der Teilnehmer beantworten. Das gibt sicher wieder einige sehr interessante Gespräche.

Im Moment sitze ich im Hauptbahnhof in Hannover und warte auf meinen Zug. Der hat mal wieder 30 Minuten Verspätung. War ja klar, wo ich sowieso schon 30 Minuten Zeit zum Umsteigen hatte. Aber inzwischen bin ich's ja gewohnt, deshalb fahre ich auch schon heute Abend nach Berlin und nicht erst morgen früh, wo ich mit dieser Verspätung schon zu spät zur Konferenz gekommen wäre.

Technorati tags: , , , ,
Kick it on dotnet-kicks.de

Dynamisch erzeugte Validation Controls innerhalb eines ASP .NET Ajax UpdatePanel verwenden

Sunday, January 07, 2007 1:47:46 AM (W. Europe Standard Time, UTC+01:00)

Das ist mal wieder typisch. Tagelang suche ich nach einer Lösung für mein Problem, und kaum dass ich mein Problem in den ASP .NET Foren und in meinem Blog veröffentliche und um Rat frage komme ich selbst drauf :). Also hier ist die Lösung:

Problembeschreibung
Erzeugt man Validation-Controls per Code innerhalb eines ASP .NET UpdatePanel und verwendet "partial rendering" (d.h. bei einem Postback wird nur der Inhalt des UpdatePanel dynamisch über JavaScript nachgeladen, und nicht die komplette Seite), so erhält man nach einem Postback einen JavaScript-Fehler. Der Fehler tritt auf, weil nach dem Postback alle Expando-Attribute (das sind zusätzliche Attribute von Web Controls, wie z.B. "controltovalidate" bei den Validation Controls) nicht mehr definiert sind. Der Fehler tritt nicht auf, wenn die XHTML Compliance-Mode der Seite auf "legacy" eingestellt ist, in der Standardeinstellung wird allerdings XHTML-Code erzeugt, so dass der Fehler auch auftritt.

Ursache
In XHTML konformen Dokumenten sind zusätzliche Attribute wie "controltovalidate" nicht erlaubt. Damit diese trotzdem über JavaScript verfügbar sind, erzeugt ASP .NET in solchen fällen statt Attributen JavaScript-Code, der die Attribute setzt. Innerhalb eines UpdatePanels muss JavaScript-Code beim ASP .NET Ajax ScriptManager registriert werden, damit der Code nach einem Postback innerhalb des UpdatePanel erneut ausgeführt wird. Die Validation Controls kennen den ScriptManager natürlich nicht, sondern registrieren ihren Script-Code nur beim ClientScriptManager der Page-Klasse. Damit man diese Controls trotzdem innerhalb eins UpdatePanel verwenden kann gibt es Ajax-kompatible Versionen dieser Controls im Namespace System.Web.UI.Compatibility. Deklarativ (also in der ASPX-Seite) erzeugte Controls werden automatisch auf die Controls in diesem Namespace gemappt, d.h. statt der ASP .NET Version der Validation Controls wird automatisch und für den Entwickler transparent die ASP .NET Ajax Version erzeugt. Wenn man selbst Controls per Code erzeugt erfolgt dieses Mapping nicht, deshalb funktionieren die Validation Controls nicht.

Lösung
Statt der Controls aus System.Web.UI muss man einfach nur die Ajax-kompatiblen Versionen aus System.Web.UI.Compatibility verwenden.

Informationsquellen
http://ajax.asp.net/docs/mref/N_System_Web_UI_Compatibility.aspx

Kick it on dotnet-kicks.de

ASP .NET Ajax Problem - biete MCP Voucher für die Lösung

Sunday, January 07, 2007 12:38:12 AM (W. Europe Standard Time, UTC+01:00)

Ich habe im Moment ein Problem mit dem ASP .NET Ajax Toolkit (genauer mit dem ValidatorCalloutExtender), und bin seit ein paar Tagen auf der Suchen nach einer Lösung dafür. Leider habe ich bisher nichts brauchbares gefunden. Deshalb biete ich jetzt demjenigen, der mir bei meinem Problem hilft und eine Lösung findet einen Pearson Vue MCP Voucher. Details in meinem Forenbeitrag dazu in den ASP .NET Ajax Foren.

Der Voucher ist noch von einer der Beta MCP Zertifizierungen übrig, bei den .NET 2.0 Prüfungen gab's für jede bestandene Prüfung einen Voucher. Da es seitdem ständig neue Betas gab habe ich die Voucher noch nicht gebraucht, und die ersten laufen schon Ende Februar / Anfang März ab. Die älteste Prüfung bei der ich auf das Ergebnis warte war am 7. September (71-540, Mobile Application Development). So lange dauert das sonst eigentlich nicht, das Ergebnis für die 501 vom 25. Oktoer habe ich schon seit ein paar Tagen. Naja sollte wohl jetzt bald kommen. Hat einer von euch in letzter Zeit Beta MCP Ergebnisse bekommen?

Kick it on dotnet-kicks.de
Page 1 of 1 in the Ajax category