18.10.2010, 06:11 Uhr

ASP.NET 4.0 - die wichtigsten Neuerungen ( Teil 1)

In dieser Rubrik werden in loser Folge die wichtigsten Neuerungen vorgestellt, die mit ASP.NET 4.0, das Teil des .NET Framework 4.0 und von Visual Studio 2010 ist, einhergehen.
Verbesserte ID- und Client-ID-Funktionalität Mit ASP.NET 4.0 ist es endlich möglich, auf die vormals automatische Vergabe der eindeutigen Identifier für serverseitige Steuerelemente Einfluss zu nehmen. Somit wird der clientseitige Zugriff mittels JavaScript erheblich vereinfacht. Im Zeitalter moderner Web 2.0-Anwendungen kommt in der Regel keine Weboberfläche ohne JavaScript aus. Die reine serverseitige Verarbeitung verursacht viele Postbacks und führt zu einem unnötigen Neuladen der gesamten Seite. Teilweise kann dies durch den Einsatz des ASP.NET UpdatePanels verhindert werden. Aber auch das UpdatePanel ist für kleinere clientseitige Aktionen wie ein regelbasiertes Ein- und Ausschalten eines Steuerelements zu mächtig und verursacht zu viel "Traffic". Typischerweise werden heutzutage serverseitige Seiten einmalig erzeugt und zum Browser gesendet. Die weitere Interaktion mit der Anwendung verläuft danach im optimalen Fall über clientseitiges JavaScript. Die weitere Kommunikation zwischen Browser und Server findet über asynchrone Hintergrundaufrufe statt.Auch ASP.NET Anwendungen können, basierend auf diesem Modell, realisiert werden. Jedoch gestaltete sich in der Vergangenheit der Zugriff auf die Steuerelemente etwas umständlich. Bis zur .NET Version 3.5 wurden die eindeutigen ID"s der Steuerelemente nach einem festen Schema erzeugt. Dabei wurden die ID"s aus der Struktur der Steuerelementhierarchie abgeleitet. Das Beispiel in Abb. 1. verdeutlicht den Mechanismus.  Abb. 1 zeigt das produzierte HTML-Ergebnis einer ASP.NET-Seite. Es ist gut erkennbar, dass sich der clientseitige Zugriff auf das Textbox-Steuerelement etwas schwierig gestaltet. Die originale ID der Textbox lautet lediglich "txtName", die serverseitige Verarbeitung ändert die ID allerdings zu "ctl00_MainContent_txtName". Je komplexer die Seitenstruktur wird, desto komplexer werden die generierten ID"s. Auch die Verwendung von wiederholbaren Datensteuerelementen - wie z. B. Repeater oder DataGrid - verschärfen das Problem.Soll clientseitig auf die Textbox zugegriffen werden, muss zunächst die aktuelle ID ermittelt werden. Um einen effizienten Zugriff auf die Steuerelemente zu ermöglichen, sollten die Zugriffe auf die Steuerelemente gekapselt werden. Dazu ist für jedes Steuerelement eine JavaScript Funktion nach dem Schema in Abb. 2. Vorzusehen. Die Eigenschaft ClientID enthält die serverseitig vergebene ID, mithilfe dieser kann dann über die DOM-Methode getElementById auf das Steuerelement zugegriffen werden. ASP.NET 4.0 ermöglicht mit der neuen Einstellung ClientIDMode auf die Generierung der ID-Werte Einfluss zu nehmen. Somit wird auch der clientseitige Zugriff erleichtert. Derzeit stehen vier Einstellungen für den ClientIDMode zur Auswahl: AutoID, Static, Predictable und Inherit. Das ClientIDMode Attribut kann für jedes Steuerelement und auch global innerhalb der @Page-Direktive gesetzt werden. Abb. 3 zeigt die Verwendung innerhalb der @Page-Direktive. Bei der Verwendung einer oder mehrerer MasterPages kann durch die Verwendung der Einstellungsmöglichkeit über die Page-Direktive leicht eine globale Umstellung erfolgen. Zusätzlich kann der ClientIDMode auch in Web.config festgelegt werden (Abb. 4). Wird kein Wert für den ClientIDMode angegeben, werden die ID-Werte nach dem zuvor beschriebenen automatischen Algorithmus vergeben. Die ClientIDMode-Standardeinstellung innerhalb der Page-Direktive lautet AutoID, alle Steuerelemente erben durch die Einstellung Inherit diese Einstellung. Die neuen Modi Static und Predictable Im Modus Static werden die ID-Angaben der Steuerelemente so übernommen, wie diese zur Entwicklungszeit gesetzt wurden. Das bedeutet, auch innerhalb clientseitiger JavaScripts können die gleichen ID-Angaben verwendet werden, um auf die Steuerelemente zuzugreifen. Der HTML-Auszug in Abb. 5 zeigt das Beispiel aus Abb. 1 - dieses Mal ausgeführt im Static Modus. Abb. 5 macht deutlich, die ID der Textbox bleibt unverändert. Somit kann direkt über den Aufruf document.getElementById("txtName") der Inhalt clientseitig ausgelesen werden. Auch wenn der Static-Modus die größte Flexibilität darstellt, ist er dennoch mit Bedacht zu verwenden. Da die ID-Einstellungen unverändert übernommen werden, besteht die Gefahr, dass unterschiedliche Steuerelemente die gleiche ID besitzen. Bei dem Einsatz von gebundenen wiederholbaren Datensteuerelementen ist die Gefahr am größten, wie das Beispiel in Abb. 6. verdeutlicht. Wird dieser Code im Static-ClientIDMode ausgeführt, resultiert der HTML-Code, der in Abb. 7 zu sehen ist. An Abb. 7 zeigt sich das Problem von Static. Für alle span-Tags wurde die gleiche ID verwendet, ein gezielter Zugriff auf ein bestimmtes span-Tag ist damit nur umständlich möglich. Um dieses Problem zu umgehen, kann für wiederholbare Datensteuerelemente die ClientIDMode-Einstellung Predictable verwendet werden. Wird das ListView-Steuerelement in diesen Modus geschaltet, ergibt sich die Ausgabe aus Abb. 8.In diesem Modus werden die ID"s wie folgt zusammengesetzt:übergeordneter Namenscontainer + Datencontainer-ID+Steuerelement-ID + fortlaufende Nummer. Anstatt der fortlaufenden Nummer kann ein Datenfeld auch über die Eigenschaft ClientIDRowSuffix festgelegt werden. Der Inhalt des Datenfeldes wird der ermittelten ID angehängt. So kann im vorherigen Beispiel z. B. die EmployeeID als Suffix wie folgt festgelegt werden:<asp:ListView ClientIDMode="Predictable" ClientIDRowSuffix="lblEmployeeID" ...> Nach dieser Änderung wird der HTML-Code in Abb. 9 generiert. Im Gegensatz zum ListView können dem GridView-Steuerelement mehrere Datenfelder übergeben werden, die der generierten ID angehängt werden. Der Repeater unterstützt die Eigenschaft ClientIDRowSuffix nicht und hängt jeweils den aktuellen Datenindex der erzeugten ID an. De Eigenschaft ClientIDMode bietet eine gute Steuerung der ID-Vergabe für serverseitige Steuerelemente. Bei der Verwendung von Static muss jedoch selbst auf die unter Umständen benötigte Eindeutigkeit der ID-Werte geachtet werden. Bei der Entwicklung von Steuerelementen sollte der ClientIDMode nicht explizit innerhalb des Steuerelementes festgelegt werden, da dies leicht zu ID-Konflikten führen kann. Marc André Zhou ist Dipl. Inf. (FH) und Master of Science. Derzeit ist er für die Logica Deutschland GmbH & Co. KG als Senior Consultant tätig. Weitere Informationen finden Sie auf seinem Blog (http://www.sw-consultant.de).von Marc André Zhou


Das könnte Sie auch interessieren