Archiv der Kategorie: Extension Methods

Messages in MVC zwischen Views bzw. Controllern “übergeben/anzeigen”


Zum übermitteln von Nachrichten zwischen den Views gibt es die unterschiedlichsten Möglichkeiten, man könnte z.B. die Meldungen auch in der URL übergeben, was den Nachteil hat, die URL sieht “unsauber” aus und der Fehler kann evtl. mehrfach angezeigt werden. Denn mit den Methoden die bereits in MVC bereitgestellt werden “ModelState.AddModelError” lassen sich nur Fehler auf dem aktuellen View und Controller ausgeben, sobald man eine Fehlermeldung auf einer anderen Seite ausgeben möchte, ist dies nicht mit “Bordmitteln” von MVC möglich.

Daher habe ich mich für das Abspeichern der Nachrichten im Controller TempData entschieden, da diese Daten nach dem ersten Abrufen wieder aus TempData gelöscht werden. Dazu muss man einmal eine Klasse erstellen auf die man im Controller zugreift und am besten noch einen HTML-Helper der einem die Nachricht dann ganz einfach im View ausgibt.

Außerdem wollte ich gerne unterschiedliche Nachrichtentypen haben, und nicht nur Fehler ausgeben, denn es gibt ja z.B. auch noch Bestätigungen das das Speichern erfolgreich war oder Warnungen.

Als erstes erstellen wie eine Nachrichtenklasse:

image

Die wir später als Grundlage für die Nachricht nehmen die wir übermitteln wollen und dann benötigen wir noch eine Klasse für die Logik, damit wir die Nachrichten so einfach wie möglich unserem TempData hinzufügen können. Am besten mit einem Singleton Pattern, damit wir weniger schreiben müssen beim Hinzufügen der Message.

Im Folgenden also die Logikklasse, welche im Konstruktor den aktuellen Controller benötigt, damit auf TempData zugegriffen werden kann und die Message abgelegt wird.

image

(Leider habe ich bisher noch keine andere Lösung gefunden wie man evtl. noch auf TempData zugreifen kann ohne den Controller übergeben zu müssen, denn dann wäre der Aufruf noch kürzer, über Hinweise freue ich mich sehr!)

Hinzufügen einer Message in Controller oder einer anderen Klasse, hier muss nur jeweils der aktuelle Controller mit übergeben werden.

image

image

Die Anzeige der Fehlermeldung ist, dann ganz Einfach über eine HTML-Helper Extension gelöst und kann in jedem View zum Einsatz kommen, dabei spielt es keine Rolle in welchem Controller oder View die Meldung hinzugefügt wurde.

image

Es müssen dann natürlich noch für die jeweiligen MessageTypes die passenden Css Klassen angelegt werden, damit die Messages auch in der passenden Farbe angezeigt werden können.

Im View reicht es dann einfach nur an der passenden Stelle wo der Fehler angezeigt werden soll den Helper aufzurufen und schon funktioniert das ganze einwandfrei:

image