Kolumne: Dino talks

Asynchrone Eingabeformulare in ASP.NET MVC (Teil 2)
Kommentare

HTML-Nachrichten in ASP.NET MVC
In ASP.NET MVC gibt es prinzipiell zwei Möglichkeiten, asynchrone Aufrufe zum Webserver auszuführen: die asynchrone ActionLink-Hilfsklasse und das asynchrone Formular.

HTML-Nachrichten in ASP.NET MVC

In ASP.NET MVC gibt es prinzipiell zwei Möglichkeiten, asynchrone Aufrufe zum Webserver auszuführen: die asynchrone ActionLink-Hilfsklasse und das asynchrone Formular. In beiden Fällen können Sie mit einer Instanz der Klasse AjaxOptions die Art und Weise beschreiben, wie Sie die AJAX-Anforderung ausführen möchten. Tabelle 1 gibt die Eigenschaften der Klasse AjaxOptions an.

Eigenschaft Beschreibung
Confirm Zeichenfolge; gibt die Meldung an, die in einem Bestätigungsfenster anzuzeigen ist, bevor die Anforderung gesendet wird.
HttpMethod Zeichenfolge; gibt die zu verwendende HTTP-Methode an.
InsertionMode Zeigt mit den Werten des vom System bereitgestellten Aufzählungstyps InsertionMode den Modus an, wie die von der Anforderung heruntergeladenen Inhalte in das aktuelle DOM eingefügt werden sollen.
LoadingElementId Zeichenfolge; gibt die ID des DOM-Elements an, das anzuzeigen ist, während die Anforderung ausgeführt wird.
OnBegin Zeichenfolge; gibt die JavaScript-Funktion an, die aufzurufen ist, bevor die Anforderung ausgeführt wird.
OnComplete Zeichenfolge; gibt die JavaScript-Funktion an, die aufzurufen ist, wenn die Anforderung abgeschlossen ist.
OnFailure Zeichenfolgeneigenschaft; gibt die JavaScript-Funktion an, die aufzurufen ist, wenn die Anforderung mit einem Fehler abgeschlossen wurde.
OnSuccess Zeichenfolge; gibt die JavaScript-Funktion an, die aufzurufen ist, wenn die Anforderung erfolgreich abgeschlossen wurde.
UpdateTargetId Zeichenfolge; gibt die ID des DOM-Elements an, das mit den heruntergeladenen HTML-Inhalten aktualisiert wird.
Url Zeichenfolge, gibt die Ziel-URL der Anforderung an.

Tabelle 1: Eigenschaften der Klasse „AjaxOptions“

Zwei dieser Eigenschaften verdienen angesichts des HTML-Message-Musters etwas mehr Aufmerksamkeit – InsertionMode und UpdateTargetId (Listing 1).

<% using (Ajax.BeginForm("Update", 
          new AjaxOptions { 
                   LoadingElementId = "panelPleaseWait", 
                      InsertionMode = InsertionMode.Replace,
                   UpdateTargetId = "panelResults" }))
   { %>
     <% Html.TextBox("Name", ViewData.Model.Name); %>
     <% Html.TextBox("Date", ViewData.Model.Date); %>
     :
     
<% } %>
:
...
Please wait ...

Wenn Sie asynchrone Formulare wie im obigen Codefragment verwenden, führen Sie eine POST-Anforderung aus und erhalten HTML zurück. Der Unterschied zwischen einem klassischen Formular und einem asynchronen Formular besteht in der Art und Weise, in der das zurückgegebene HTML verarbeitet wird. Ajax.BeginForm implementiert einen Algorithmus, der einem partiellen Rendering ähnelt, das Sie wahrscheinlich schon von Webformularen her kennen. Die Eigenschaft UpdateTargetId der AjaxOptions-Struktur gibt den DOM-Unterbaum an, der sämtliche vom Server generierte Markups empfängt. Die Anforderung wird asynchron gesendet und HTML wird empfangen. Das empfangene HTML wird dem angegebenen DOM entsprechend der Anweisungen zugeordnet, die über den InsertionMode-Parameter festgelegt wurden. Der InsertionMode-Parameter erhält seine Werte aus der InsertionMode-Aufzählung: InsertBefore, InsertAfter und Replace. Der Standardwert ist Replace – und er ist dafür verantwortlich, dass das Gesamtverhalten von Ajax.BeginForm fast wie ein partielles Rendering von Webformularen aussieht. Die Eigenschaft LoadingElementId legt ein weiteres Element für die Ähnlichkeit mit partiellem Rendering von Webformularen fest. Es repräsentiert das Segment des DOMs, das während der Ausführung der asynchronen Operation vorübergehend angezeigt wird und stark an das UpdateProgress-Steuerelement von Webformularen erinnert.

Unterschiede zum partiellen Rendering von Webformularen

Sowohl partielles Rendering von Webformularen als auch asynchrone ASP.NET-MVC-Formulare implementieren das HTML-Message-Muster, um mit dem Server zu kommunizieren. Dennoch existieren einige Unterschiede. Erstens wird partielles Rendering als normales Postback ausgeführt, nur dass es asynchron stattfindet. Charakteristisch für Webformulare ist, dass Postbacks nacheinander auftretende Operationen sind und es nicht zulässig ist, dass zwei Postbacks parallel laufen. Der Grund dafür ist die Abhängigkeit des Postback-Ereignisses vom Seitenansichtszustand. Wenn zwei Postbacks asynchron und parallel laufen, werden zwei Kopien des Ansichtszustands an den Server übertragen. Folglich werden zwei unterschiedlich aktualisierte Kopien des Ansichtszustands zu verschiedenen Zeitpunkten zurückgesendet – dennoch ist keine von ihnen repräsentativ für den Zustand, der aus den beiden unterschiedlichen Operationen resultiert.

In ASP.NET MVC gibt es keinen Ansichtszustand, zumindest wenn Sie keine Serversteuerelemente in der Ansicht verwenden. Diese einfache Tatsache ermöglicht parallele asynchrone Operationen, die sicher und effektiv sind und sich zudem schnell schreiben lassen.

Zusammenfassung

Das HTML-Message-Muster basiert auf dem Prinzip, dass Browser und Webserver über POST- oder GET-Anforderungen reine Eingaben senden und HTML-Antworten empfangen. Das Muster ist zwar nicht so effizient wie das Austauschen von JSON-Datenströmen über AJAX-Verbindungen, doch gibt es sowohl in Webformularen als auch ASP.NET MVC leistungsfähige Implementierungen, die es immerhin zu einer lohnenswerten Wahl machen. Aus dem Blickwinkel des Benutzers ist der Unterschied weniger auffällig, als man zuerst denken mag. Der Unterschied der wahrgenommenen Leistung zwischen AJAX- und Nicht-AJAX-Lösungen ergibt sich vor allem daraus, dass es nicht notwendig ist, die vollständige Seite zu laden und zu aktualisieren. Und all das bekommen Sie unabhängig davon, wie Ihre Implementierung von AJAX aussieht.

Dino Esposito ist R&D Director bei Crionet, einer Firma, die sich auf webbasierte Lösungen für Sportereignisse in ganz Europa spezialisiert hat. Außerdem ist Dino der Autor von „Programming ASP.NET MVC“, Microsoft Press, 2010.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -