ASP.NET MVC 5 Grundkurs

Einen Datensatz anlegen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Neuanlage eines Datensatzes ist der nächste Schritt in der Web-Oberfläche für die Datenbankdaten. Hierzu müssen Sie erstmals auch HTTP-POST-Daten verarbeiten. Dank Model Binding ist das ein Kinderspiel.
12:32

Transkript

Daten aus der Datenbank anzeigen? Das können wir jetzt bereits. Fügen wir mal was hinzu, weil das Hinzufügen per se ist natürlich eine Herausforderung, die wir überwältigen müssen, und vor allem den Ablauf. weil wir haben da ein Formular und das Formular wird per HTTP-Post verschickt, und wir müssen diese Daten irgendwie verarbeiten, und das ist natürlich alles kein Hexenwerk, aber aber das gibt es auch eben relativ bequem, und da wird uns auch wieder Visual Studio mit den eingebauten Assistenten unterstützen und ASP.NET MVC sowieso. Also schauen uns das an, und beginnen mit dem Erstellen eines neuen Eintrages, also Personen und wir nehmen Create, die Begrifflichkeit Create wird eben auch in diesen Scaffolding-Tools verwendet, deswegen bleibe ich da mal dabei, und habe dann hier das Public Action Result create, ja, und das ist relativ langweilig, ich sage return View, und sage, gut, ich habe eine View, die soll einfach mal angezeigt werden. ich muss, ja, keine Daten an diese View übergeben, und muss ich keine Daten an diese View übergeben, na ja, ich werde jetzt ein Formular erhalten, und dieses Formular dient dazu, dass eine neue Person angelegt wird. aber ich habe noch keine Person, die die View kennen muss. Also sage ich einfach, na ja, nehme ich eine View und die erstelle ich. Immer wieder dasselbe, Ansicht hinzufügen, und auch hier lassen wir wieder durch Scaffolding helfen, weil ich muss jetzt das Formular erzeugen. Na ja, ich muss jetzt also ein Formular erstellen, und in dem Formular müsste ich mindestens 3 Felder anlegen, lasse über 4, Vorname, Nachname, Geburtsdatum und die Schaltfläche zum Versenden, ja, das lasse ich mir einfach schon mal von Visual Studio vorgeben, denn Visual Studio sieht ja die Klasse, die wir verwenden, die Kontextklasse, beziehungsweise dann auch die Entität, die wir einsetzen, und zieht daraus die Informationen. Und deswegen nehme ich die Ansicht, die ich Create nenne, und als Vorlage nehme ich dann eben auch Create, also zum Erstellen, Modell ist wieder die Person, Kontextklasse ist wieder Personen-Datenbank-Entities, lassen wir also das Scaffolding arbeiten, wird jetzt die Datei Create.cs-HTML angelegt, und diese CS-HTML-Datei ist auch typisiert. ich habe wieder die At-Modellanweisung, und mir wird gesagt, okay, diese View hat einen Typ, den Typ-Person. Das ist jetzt auf den ersten Blick etwas merkwürdig, wir haben, ja, keine Daten übergeben, aber das ist egal. Wir übergeben zwar nichts, aber der Benutzer füllt dieses Formular aus oder diese View aus, die wir ihm schicken und Daten, die dort eingetragen werden, repräsentieren eine Person und wir werden sehen, wie bequem das ist, wenn diese Daten dann zurückgeschickt werden. Schauen wir uns das Ganze mal an, wie sieht die Seite aus. Nun wir erzeugen zunächst ein Formular-Element, und jetzt steht es nicht einfach Spitze-Klammer-Form drin, sondern es wird wieder so eine statische Hilfsmethode aufgerufen, die heißt Begin Form, was das macht, ist, dass unter anderem die Form eingestellt wird, dass Sie per HTTP-Post verschickt wird, und dass die Form an die richtige Action-Methode verschickt wird. Also besser so zu sagen, der Sinn des Ganzen und deswegen, ja, haben wir das entsprechend hier, dann hätten wir hier noch ein Sicherheitsfeature, das verhindern soll, dass sozusagen das Formular etwas vereinfacht formuliert ferngesteuert wird, eben noch ein Sicherheitstoken eingebaut wird, dass es also keiner durch eine Umleitung dazu hinbewegen kann, eine neue Person anzulegen, dann gibt es hier noch eine eingebaute Validierung, das ignorieren wir zunächst mal, und interessant wird es dann, wenn wir diese mit vorenthaltenen Methoden haben. HTML-Label-For erzeugt ein Label und zwar für den Vornamen, ja, und weist auch eine CSS-Klasse zu, wenn wir uns dann anschauen, wie das Ganze dann im Browser, im Quelltext aussieht, können Sie das auch dann wunderbar selber stillen. Aber bisher gilt einfach, wir haben ein entsprechendes Label, dieses Label wird vergeben für den Vornamen, und heißt standardmäßig Vorname, aber wir könnten in Kontextklasse das anpassen, also eine andere Beschriftung angeben, brauchen wir jetzt hier doch nicht, das heißt wir nehmen da, wie es ist, und können das eigentlich auch direkt überschreiben an der Stelle. dann nehmen wir das auch mal zur Validierung der Komplexität heraus, ersetze es einfach durch Vorname, was wir aber auf jeden Fall drin lassen ist dieses hier, HTML.EditorFor, HTML.EditorFor erzeugt ein Eingabefeld für den zugehörigen Wert. Das heißt in dem Fall für den Vornamen. Was dann MVC macht ist, es schaut nach, was für ein Datentyp ist es, gibt es für diesen Datentyp irgendeine Form von besonderen Editor. da kann man sich auch gegebenenfalls einklingen, standardmäßig ist es so, unser Vorname ist ein String, eine Zeichenkette, also wird es ein einzeiliges Textfeld, passt also. Ja, validiert würde auch, aber Validierung schmeißen wir zunächst mal raus. Dann dasselbe nochmal für den Nachnamen. Hier würden ein Text ausgegeben, das mache ich direkt hier, wieder EditorFor erzeugt also eine entsprechende Eingabefeld-Anweisung und dann hätten wir noch das Geburtsdatum, und beispielsweise im Zuge von HTML5 könnte man hier vielleicht ein Datumsfeld überlegen, und wir nehmen hier auch wieder den Automatismus. Also wir haben Vornamen, Nachnamen und Geburtsdatum, diese Felder werden angelegt, und ich mache eben hier nicht von Hand ein einzeiliges Eingabefeld, sondern ich nehme diese Hilfsmethode, weil dann weiß nämlich die View immer noch, dass dieses eine Eingabefeld den Vornamen repräsentiert, und dieses Eingabefeld repräsentiert den Nachnamen, und kann das dann später zusammensetzen, werden wir gleich sehen. Ja, und dann gibt es noch die Versenden-Schaltfläche zum Anlegen sozusagen, und noch einen Link zurück zur Liste, HTML Action-Link hatten wir schon gesehen, also zurück zur, sagen wir Übersicht, und das ist es. Ja, das heißt also wir haben so ein wunderschönes Formular. Bin ich schon ganz gespannt, schauen wir uns es an und es sieht genauso aus, wie gedacht. Muss, ja, auch nicht übergeben werden an die View, weil die Action-Methode sehr sehr simpel ist, und ja jetzt könnte ich den Vornamen, den Nachnamen und ein Geburtsdatum eingeben, und dann auf Create klicken, aber was passiert dann. Schauen wir kurz in den Quelltext. Der Quelltext hat hier das Formular erzeugt, und sagt, das ist ein Formular, das per Post verschickt wird und dieses Formular wird verschickt an /Personen/Create. Okay, das heißt, es wir also wieder die Action-Methode aufgerufen mit der wir das Formular schon anzeigen . Das ist aber schwierig, weil das heißt ja, die Methode muss "Create" heißen, die die Daten entgegennimmt. Bedeutet für uns, wir müssen in unseren Controller gehen, und in unserem Controller eine neue Methode anlegen, die da heißt, "Create", hmm, komisch. Zweimal dieselbe Methode, nah, kann nicht sein, beschwert sich gleich. Gut in dem Fall noch, dass wir kein Rückgabewert haben, aber vom Prinzip ist es zweimal die selbe Methode. Und jetzt kommt der Clue. Es gäbe eine Möglichkeit, dass Sie diese Methode anders benennen. Also zum Beispiel "CreatePost" und dann können wir hier ein Attribut einsetzen, ActionName und können über diesen ActionName angeben, okay, das ist eigentlich die Crate-Action. Aber wir können ruhig den gleichen Namen beibehalten. Wir können das weiterhin Create nennen, müssen aber natürlich Visual Studio und ASP.NET MVC vor allem mitteilen, na ja, diese Methode, die soll zum Einsatz kommen bei einer Postanfrage. Die hier oben, wo wir nichts besonderes machen, die kommt bei einer Get-Anfrage. Auch dafür gibt es ein Attribut, das heißt "HttpPost". Und Sie sehen hier eine Autoergänzung, das gibt es auch für weitere HttpVerben, also PutDelete beispielsweise. So, jetzt habe ich also eine Create-Methode und die wird aufgerufen, wenn Daten per Post geschickt werden. Na ja, was werden den für Daten per Post geschickt? Eine Reihe von Formularfeldern. Das heißt, eigentlich ist es vom Typ FormCollection. Ist also so eine Art ja [unverständlich] Da stecken die einzelnen Formularfelder drin, dann ziehen wir uns den Vornamen, den Nachnamen, das Geburtsdatum raus, erzeugen daraus eine neue Personeninstanz und diese Personeninstanz, die wandert dann vielleicht in die Datenbank. Kling aufwendig, klingt zu aufwendig. Denken Sie dran, die View ist ja typisiert. Die View weiß, sie ist vom Typ Person. Das heißt aber auch, die Daten die verschickt werden, die werden automatisch von ASP.NET MVC in eine Person wieder zurückumgewandelt. Heißt, dort in dem Umfeld auch Model Binding. Sozusagen an das Modell gebunden, das Modell ist Person, das heißt, als Übergabeparameter an diese Create-Methode bekomme ich eine Person. Und Person ist jetzt wirklich eine Instanz von Person, gefüllt mit Vorname, Nachname, Geburtsdata aus dem Formular. Ja, das heißt, das einzige was ich jetzt machen muss, ist diese Person noch in meinen Datenspeicher einzufügen. Da muss ich erstmal schauen, ob die Person sozusagen in Ordnung ist, also wenn ich Pflichtfelder hätte, ob das entsprechend gefüllt ist et cetera und das können wir auch aus dem Modell alles entnehmen. Wir führen das an der Stelle zu weit, aber es gibt hier eine Eigenschaft, die heißt, IsValid in ModelState. Also ist der Zustand des Modells in Ordnung, falls ja, fügen wir die Person hinzu, das heißt, wir haben hier unsere Datenbank und dort unsere Personen, also People und dann gibt es hier die Methode Add und ich füge die Person hinzu und speichere dann die Änderungen in der Datenbank Nachdem ich das gemacht habe, tja was mache ich denn nach dem Speichern? Bin ich dann immer noch auf der Create-Seite, soll nochmal das Create-Formular kommen? Nee, eigentlich nicht. Ich will wieder zur Übersicht zurück, also return RedirectToAction("Index"). So. Das für den Fall, dass alle in Ordnung ist, ansonsten was mache ich, wenn nicht alle in Ordnung ist? Also, ich habe beispielsweise ein Pflichtfeld vergessen. Wie läuft denn das dann? Na ja, normalerweise bekommen wir dasselbe Formular wieder und bekommen dann halt wieder unsere Eingabemaske. Das heißt, ich mache einfach return View(). Ich gebe also wieder die aktuelle View zurück. Wie heißt die View zu Create Action Methode? Das ist die Create.Cshtml Datei. Und jetzt kommt der Clue. Sie kennen es ja aus dem Web, wenn Sie ein Formular ausfüllen und vergessen irgendwas, dann bekommen Sie das Formular nochmal und in fast allen Fällen ist Ihre Ausfüllung von vorher, also sind Ihre Eingaben immer noch vorhanden. Wäre es nicht schön, wenn jetzt dieses Formular eben auch vorausgefüllt wäre? Schauen wir uns mal die View an. Ich meine, ich habe ja hier ein Feld, das ist ein Editor für den Vornamen des Modells. Wenn jetzt der Vorname bereits gesetzt ist, weil ich an die View jetzt doch eine Person übergeben, typisiert ist sie ja, dann hätte ich alles erreicht. Nun, ich habe ja die vermeintliche Person gerade übergeben bekommen und das heißt in dem Fall, wenn ich einen Fehler habe, übergebe ich die Person einfach wieder zurück an die View. Das ist also ein ganz klassisches Entwicklungsmodell, dass ich mir zuerst per Get mir die Editiermaske hole, und wenn die dann per Post verschickt wird, lande ich wieder bei der Editiermaske unter Beibehaltung meiner vorherigen eingaben, wenn was schief gelaufen ist. Wenn nichts schief gelaufen ist, dann speichere ich die Daten einfach ab und leide dann wieder auf die Übersicht zurück. So einfach ist das und dieses Muster, auch wenn das jetzt auf den ersten Blick vielleicht etwas merkwürdig aussieht, auch wegen den zwei identischen Methodennamen. Dieses Muster werde Sie immer wieder haben, nicht nur beim Erstellen auch beim Editieren, beim Löschen an vielen Stellen. Sie haben Get, dann haben Sie einen Post und nach dem Post kommt ja, wieder irgendeine View, in der Regel eine Redicet, Get, Post, Redirect, ganz klassisches Muster, um das sozusagen vollständig zu dokumentieren, schreibe ich das auch noch her hin. Müsste ich nicht, dann sehen wir auch gleich wozu diese Methode hier gut ist. Schauen wir es und kurz an. Also starten wir den Browser, startet wieder standardmäßig am Ausgangspunkt, wir wollen natürlich zu Personen gehen, bekommen dann unsere Liste der Personen, haben jetzt hier noch keinen Link zum Anlegen einer neuen Person, das müssten wir noch nachholen, aber jetzt machen wir das noch von Hand, also Create landen dann auf der Eingabemaske und machen dann "Martin Muster", was weiß ich, "06.01.1970", klicken auf Create, Postanfrage, hat alles geklappt, sind wieder an der Übersicht und diese Übersicht wurde jetzt um einen zusätzlichen Eintrag erweitert. Wurde also in die Datenbank geschrieben, hat alles perfekt funktioniert, eben mit diesem Get-, Post-, Delete- Muster, das wir eben hier ganz ganz häufig beim Einsatz von ASP.NET MVC haben.

ASP.NET MVC 5 Grundkurs

Machen Sie sich mit den Grundlagen von ASP.NET MVC 5 vertraut und lassen Sie sich in dieser anspruchsvollen Einführung diesen Architekturansatz von Microsoft erläutern.

2 Std. 30 min (20 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!