Grundlegende Webentwicklung Mit ASP. NET 5 | Trevoir Williams | Skillshare

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Grundlegende Webentwicklung Mit ASP. NET 5

teacher avatar Trevoir Williams, Jamaican Software Engineer

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Einführung

      1:01

    • 2.

      ASP.NET einrichten

      3:35

    • 3.

      Besichtigung des Razor Projekts

      18:57

    • 4.

      Razor-Syntax verstehen

      12:19

    • 5.

      Nachricht aus den Einstellungen

      7:51

    • 6.

      Hinzufügen von Entity Framework

      12:03

    • 7.

      Datenbank zum Projekt hinzufügen

      14:32

    • 8.

      Scaffolding

      13:05

    • 9.

      Projekt Zu GitHub Hinzufügen

      9:24

    • 10.

      Razor erstellen hinzufügen

      21:40

    • 11.

      Update aktualisieren hinzufügen

      23:53

    • 12.

      Details Razor hinzufügen

      5:30

    • 13.

      Razor löschen hinzufügen

      22:30

    • 14.

      Partielle Ansichten und Benutzeroberfläche verwenden

      33:11

    • 15.

      Änderungen An GitHub Hinzufügen

      1:26

    • 16.

      Datenbankänderungen mit Entity Framework verwalten

      22:15

    • 17.

      Form - Teil 1

      24:20

    • 18.

      Form - Teil 2

      12:19

    • 19.

      Formulare und Validierungen der Datensammlung verbessern - Teil 1

      26:35

    • 20.

      Formulare und Validierungen der Datensammlung verbessern - Teil 2

      18:47

    • 21.

      Kaskadieren Dropdown-Listen mit JQuery hinzufügen - Teil 1

      24:03

    • 22.

      Kaskadieren Dropdown-Listen mit JQuery hinzufügen - Teil 2

      16:33

    • 23.

      Fix reparieren

      6:42

    • 24.

      Benutzeroberfläche bereinigen

      31:15

    • 25.

      Setup einrichten

      25:57

    • 26.

      Erster Repository hinzufügen

      16:46

    • 27.

      Seiten überdenken

      14:20

    • 28.

      Komplette Repositorien

      21:24

    • 29.

      Repository des Repository

      9:46

    • 30.

      Benutzerauthentifizierung Setup

      10:54

    • 31.

      Benutzertabelle erweitern

      4:53

    • 32.

      Registrierungsseite einrichten

      20:25

    • 33.

      Anmeldeseite einrichten

      9:45

    • 34.

      Setup

      9:34

    • 35.

      Autorisierung hinzufügen

      3:09

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

92

Teilnehmer:innen

--

Projekt

Über diesen Kurs

In diesem Kurs lernst du mit ASP.NET Core 5 eine Anwendung zu entwickeln.

Dieser Kurs baut auf deiner Grundlage der HTML-, CSS-, JavaScript- und C#-Programmierung auf.

Am Ende dieses Kurses wirst du wissen, wie du Folgendes ist:

  • Erstellen einer Webanwendung mit ASP.NET Core
  • Sichern einer Webanwendung mit Login und Registrierung
  • Lernen fortgeschrittene Konzepte wie Dependency Injection und SOLID-Prinzipien in der Programmierung
  • Verbinden deiner Webanwendung mit einer SQL Server-Datenbank
  • Verschönern deiner Website mit Bootstrap
  • Verwenden Sie JavaScript und jQuery in Ihrer Website effektiv.
  • GitHub für das Source verwenden

Komm mit mir auf diese Reise und lerne eine dynamische, datengesteuerte und SOLID aufzubauen.

Triff deine:n Kursleiter:in

Teacher Profile Image

Trevoir Williams

Jamaican Software Engineer

Kursleiter:in

Skills dieses Kurses

Entwicklung Webentwicklung
Level: All Levels

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. Einführung: Hallo und willkommen zu diesem Kurs, grundlegende Webentwicklung mit ASP.Net Core F5. Ich bin Ihr Dozent für VOR Williams und ich bin Softwareingenieur und Dozent in diesem Kurs Wir werden etwas über ASP.Net Core lernen , ein kostenloses und Open-Source-Web-Framework. Und es ist auch der Nachfolger von ASP.Net , der von Microsoft entwickelt wird. In diesem Kurs werden wir auch versuchen, unsere ASP.Net Core-Anwendung mit einer Microsoft SQL Server-Datenbank zu verbinden ASP.Net Core-Anwendung mit einer Microsoft SQL Server-Datenbank zu . Um dies zu tun, werden wir uns Entity Framework ansehen , eine Bibliothek, die speziell für diese Art von Interaktion entwickelt wurde. Wir werden uns auch mit der Quellcodeverwaltung befassen, was eine Praxis ist, um Änderungen zu steuern und zu verwalten Die Quellschule wird GitHub als Werkzeug verwenden , um diese Praxis zu erleichtern. Dieser Kurs geht davon aus , dass Sie über grundlegende Kenntnisse in HTML, CSS und C-Sharp verfügen. Wenn nicht, dann empfehle ich Ihnen, sich meine anderen Kurse zu diesen Themen anzusehen. all das gesagt und erledigt ist, lasst uns anfangen und ich kann es kaum erwarten, dich im Kurs zu sehen. 2. Setup ASP.NET Core Project: Willkommen zurück Leute. In dieser Lektion werden wir nur unsere Entwicklungsumgebung für unsere ASP.Net Core-Anwendung einrichten unsere Entwicklungsumgebung für unsere . Und ich möchte, dass Sie einfach auf Start klicken und Visual Studio Installer eingeben. Sie haben Visual Studio bereits installiert. Was wir tun müssen, ist ein paar weitere Workloads zu installieren , damit wir die Entwicklung fördern können. Nicht, sobald Sie das Installationsprogramm aufgestellt haben, sollten Sie ein Fenster sehen, das ähnlich aussieht . Und was Sie tun können, ist auf Ändern zu klicken. Und wenn Sie auf Ändern klicken, wird eine Liste der potenziellen Workloads angezeigt , die Sie installieren können. Sie haben also bereits den für die Desktop-Entwicklung. Was Sie brauchen würden, ist das für ASP.Net und die Webentwicklung. Wenn Sie es also noch nicht angekreuzt haben, kann er weitermachen und dann weitermachen und installieren. Sie können also sehen, dass ich meine bereits dazu bereit habe und Sie andere Workloads installieren können. Aber für diesen speziellen Kurs oder die nächsten Lektionen wollten wir unbedingt ASP.Net und Webentwicklung ankreuzen und installieren lassen . Sobald Sie diese Installation abgeschlossen haben, können Sie Ihr Visual Studio starten. Und von dort aus werden wir ein neues Projekt erstellen. So können Sie fortfahren und ein neues Projekt erstellen. Und wir suchen nach einer ASP.Net Core-Webanwendung. Sie können also einfach die Suche eintippen ASP.Net Core Web App. Sie werden also einige von ihnen sehen. Und Sie würden feststellen, dass Sie die Web-App haben , die Razor-Seiten verwendet. Sie haben auch die Core-Web-App , die den modalen View-Controller verwendet. Und dann haben Sie eine Web-API und Sie haben eine Reihe anderer Vorlagen. Wenn Sie mehr Erfahrung haben, können Sie mit den verschiedenen Vorlagen experimentieren. Aber dafür werden wir uns natürlich die ASP.Net Core-Web-App mit Razor-Seiten ansehen . Wir können weitermachen und das erreichen. Geh weiter und klicke auf Weiter. Und wir werden dieses Projekt-Auto hochfahren nennen . Die allgemeine Idee hinter den Projekten wird sein, dass wir eine App erstellen, Menschen bei Bedarf ein Auto bei einem Unternehmen buchen oder mieten können . Entschuldigung, es ist eine nette und einfache Fähigkeit wird wunderbar kompliziert genug sein , um die Grundlagen unter unsere Gürtel zu bekommen . Also können wir einfach weitermachen und auf Weiter klicken. Und wir werden dotnet F5 verwenden. Und dann können Sie die Razor-Laufzeitkompilierung aktivieren, die uns beim Debuggen und Testen hilft. Wir werden momentan keine Authentifizierung einrichten. Wir werden das später manuell machen, damit wir alle Komponenten sehen können , die zu diesen Einstellungen passen . Sie können fortfahren und auf „Erstellen“ klicken. Jetzt, da wir unser Projekt in Betrieb haben, werden wir uns nur einen kurzen Blick darauf werfen, was wir aus dem Tellerrand holen. Wir bekommen diese Projektstruktur. Und wenn Sie auf Start klicken, werden Sie feststellen, dass wir eine fertige Web-App erhalten. Wir haben die Web-App, wir haben unsere Navbar oben, den Inhaltsbereich. Es ist also sehr ähnlich wie das, was wir uns angesehen hätten, wenn wir uns die Grundlagen der HTML- und HTML-Entwicklung ansehen. An dieser Stelle haben wir keinen Code geschrieben, aber dennoch haben wir eine Webseite mit mindestens zwei Seiten für unser Sehvergnügen. Wir werden uns mit den Grundlagen dessen befassen , was wir aus dem Tellerrand holen. Während all dies generiert wird, wo wir finden was bleibt und was macht, wenn wir auftauchen, werden wir die Ordnerstruktur untersuchen , die wir mit dieser Webanwendung erhalten haben und was alles diese Dateien bedeuten und repräsentieren. 3. Tour von Razor Pages Project: Alles klar, also sind wir zurück. Wir werden die Dynamik oder zumindest eine Ordnerstruktur und die verschiedenen Dateien besprechen die Dynamik oder zumindest eine Ordnerstruktur und die , die wir in unserer ASP.Net Core-Anwendung erhalten . Sie haben bereits HTML und CSS sowie JavaScript durchgesehen und betrachtet und wie sich all diese Faktoren kombinieren, JavaScript durchgesehen und betrachtet und wie sich all diese Faktoren um Ihnen eine Website und das Fondsnetz zu bieten. Sie legen ein neues Projekt in einen Ordner 12, legen Sie tendenziell die verschiedenen Arten von Assets, die Bilder in ihren eigenen Ordner, CSS-Dateien in ihren eigenen Ordner usw. Nun, das baut nur auf diesen Prinzipien auf. Sie hätten auch gesehen, dass Sie während der C Sharp-Codierungsübungen in denen Sie jedes Mal, wenn Sie ein Projekt erstellen haben, in denen Sie jedes Mal, wenn Sie ein Projekt erstellen, einen brandneuen Ordner haben, in dem alle diese Dateien für das Projekt gewesen wären. Es ist das gleiche Prinzip oder Lösung ist in einem Ordner für sich selbst, das Projekt reicht von selbst aus. Und dann gibt es verschiedene Dateien und Ordner anstelle dieses anderen Ordners. Beginnen wir damit, uns Immobilien anzusehen. Eigenschaften geben uns diese Dateiabhängigkeiten man mit Bibliotheken und Frameworks zu tun hat. Davon wirst du mehr sehen , während wir weitermachen. Ich werde es nicht langweilen, weißt du, oder überwältigend damit. Aber wenn Sie sich Eigenschaften ansehen, werden Sie feststellen, dass Sie eine JSON-Datei einigen Starteinstellungen haben, sodass Sie diese Datei im Allgemeinen nicht ändern müssen, etwas sehr explizites tun was wir gerade nicht machen und wir es wahrscheinlich nicht im Rahmen dieses Kurses tun. Aber es ist gut zu schätzen, was hier drin ist. Sie werden sehen, dass Sie hier die Anwendungs-URL Canada definiert haben, wo besagt, dass Sie die URL an einer HTTP-Adresse haben und dann den SSL-Port haben, was bedeutet, dass wir, wenn wir auf Start klicken, hier die Anwendungs-URL Canada definiert haben, wo besagt, dass Sie die URL an einer HTTP-Adresse haben und dann den SSL-Port haben, was bedeutet, dass wir, wenn wir auf Start klicken, Wenn Sie auf die Anwendung zugreifen können, indem Sie entweder diese URL eingeben oder HTTPS-Doppelpunkt-Schrägstrichs lokalen Host des HTTPS-Doppelpunkt-Schrägstrichs mit der Portnummer der SSL-Ports eingeben, müssen Sie dies im Allgemeinen nicht ändern. Es ist also einfach gut, es noch einmal zu verstehen. Der nächste Hauptordner ist unser www-Stammordner. Es sieht also nicht wirklich wie ein Ordner aus, der auf Hold basiert. Die anderen Ordner haben tatsächlich in dieser Projektstruktur nachgesehen, aber was Sie erkennen würden , ist , dass es Unterordner enthält. Dies ist also ein Ordner, der die statischen Dateien für die Website speichert. Wenn wir also statische Dateien sagen, ist er, wie Sie sehen können , der CSS-Ordner, der JS-Ordner und ein anderer namens Leap. Alle diese Assets und die CSS-Dateien, JavaScript-Dateien oder Bibliotheken von Drittanbietern, die möglicherweise eine Kombination aus CSS- und JavaScript- oder jQuery-Dateien sein können. Sie möchten sie alle im www-Root speichern , da die Anwendung selbst diesen Speicherort abbildet und es sehr einfach macht, auf diesen Speicherort zuzugreifen , wenn Sie auf das CSS zugreifen möchten, diesen Speicherort abbildet und es sehr einfach macht, auf diesen Speicherort zuzugreifen, wenn Sie auf das CSS zugreifen möchten, JavaScript oder eine der anderen Asset-Dateien. Sie können also sehen, dass bereits mit Bootstrap, jQuery, jQuery-Validierung und einer anderen Bibliothek für die jQuery-Validierung integriert bereits mit Bootstrap, jQuery, jQuery-Validierung sind. Alle diese Bibliotheken kommen also irgendwie aus dem Tellerrand. Wenn wir weitere Bibliotheken hinzufügen möchten, was wir später tun werden, können wir immer mit der rechten Maustaste klicken und wir können zu Hinzufügen gehen. Und dann gibt es eine Funktion , um einfach clientseitige Bibliothek zu installieren. Wenn wir an diesen Punkt kommen, können wir dies einfach nutzen und nach unserer Bibliothek suchen. Und es würde uns alle Ergebnisse zeigen, wie wir es einfach in die Anwendung installieren können , ohne manuell abzufragen und zu fischen. Denken Sie also daran, als wir unsere jQuery-Aufnahme gemacht haben und so weiter nass, um tatsächlich auf die Website zu gehen, die Datei abzurufen und lokal zu kopieren oder ein CDN zu verwenden. Während Sie diesen Bibliotheksmanager verwenden. All das können wir hier mit nur wenigen Klicks machen. Und es würde es eigentlich einfach auf unser System oder unsere Projektordner für uns herunterladen . Okay, hier werden alle unsere statischen Dateien wirklich aufbewahrt. Wissen Sie, ob Sie jemals eine MVC-Anwendung gesehen haben, Sie es gewohnt, Modell-, Ansicht- und Controller-Ordner sofort zu sehen . Wenn nicht, ist das in Ordnung. Der Unterschied zwischen der MVC- oder Modellansicht-Controller-Vorlage und der Razor-Seiten-Vorlage ist jedoch der MVC- oder Modellansicht-Controller-Vorlage und fett, dass die Art und Weise, wie die Seiten und ihre Assets strukturiert sind, unterschiedlich ist. Mit dem MVC haben Sie das Modell , das zu viel eine Klassendatei ist. Sie haben die Ansicht, welche die HTML-Datei ist. Und dann hast du einen Controller , der die Intelligenz war. Auf Razor-Seiten. Was sie getan haben, ist, dass sie einen Ordner namens Seiten geben, und dann enthält jede Seite die CSS-HTML- oder HTML-Datei sowie die R-Codedatei, die sowohl als Intelligenz als auch als Modell dient. Werfen wir einen Blick auf die Indexseite. Die Indexseite. Denken Sie an HTML Basics, nennen Sie immer Ihren ersten Seitenindex. Nun, hier wird Microsoft diesem sehr einfachen Prinzip gerecht. Wenn ich also auf die Indexseite klicke, die CSS-HTML-Datei, werden Sie sehen, dass dies wirklich nur eine HTML-Datei ist. Ja, es hat einige Verzierungen, aber sobald Sie darüber hinweggekommen sind , was wir später besprechen werden, werden Sie feststellen, was wir später besprechen werden, werden Sie feststellen, dass es sich um dieselben Tags handelt, die wir von HTML Basics gelernt hätten. Das div-Tag, das Bild-Tag, das P-Tag und jedes andere Ziel, das Sie kennen würden, sind alle innerhalb dieser Datei, der Punkt-CSS-, HTML-Punkt-CSS-Datei, verwendbar . Es sieht aus wie der C-Sharp-Code , den wir uns gerade angeschaut haben. Okay, also haben wir die öffentliche Klasse namens Indexmodell-Dolon. Dies nennt man Vererbung. Das Indexmodell erbt vom Seitenmodell, bei dem es sich um eine integrierte Basisklasse handelt. Tatsache ist jedoch , dass dies Indexmodell genannt wird. Und wenn Sie einen Blick auf die Indexklasse werfen, Sie feststellen, dass oben eine steht, ich bin eine Seite und dann zwei, sagt es dem Modell. Sie bemerken eine Erklärung, dass mein Modell ein Indexmodell ist. Das bedeutet, dass alles, was anstelle des Indexmodells definiert wird , von der Webseite aus zugegriffen werden kann , wenn wir darauf aufbauen. Das wirst du ein bisschen mehr zu schätzen wissen. In den meisten Fällen, wenn Sie sehen, dass IRAs die meisten Seiten sind, wenn nicht alle Zeiten, werden Sie sie paarweise sehen. Sie werden sehen, dass das Dot-CSS-HTML ist. Ich bin derjenige, der Dot-CSS HTML ist. Basierend auf Ihrem Visual Studio haben Sie sie möglicherweise standardmäßig verschachtelt, aber Sie können diese Verschachtelung tatsächlich umschalten. Wisse, dass es für mich deaktiviert ist, ich kann es aktivieren. Ich neige dazu zu denken, dass dies etwas sauberer ist , denn wenn es verschachtelt ist, kann ich einfach klicken und dann sehe ich die resultierende Datei direkt darunter. Manchmal wird es verwirrend, wenn alle so aufgeführt sind, aber das liegt an dir. Ich zeige dir nur , dass du das auflisten kannst, du kannst das nach Belieben verschachteln und deaktivieren. Wie gesagt, jedes Mal, wenn Sie eine Seite oder zumindest eine Standardergebnisseite erstellen , werden beide Dateien den freigegebenen Ordner kennen. Hier werden Dateien verwendet oder auf die alle anderen Dateien, alle anderen Seiten zugegriffen alle anderen Seiten Dort werden diese gespeichert. Werfen wir einen Blick auf das Layout. Nein, du hättest bemerkt , dass ich mit unserer Indexseite einfach den Puffer mit Index schnell springen lasse. Sie hätten bemerkt, dass die Indexseite nicht HTML-Skelettstruktur aufweist , die wir aus den Grundlagen besprochen hatten. Denken Sie daran, dass wir immer mit Klebeband und dann mit den HTML-Tags beginnen und dann auf den Körper klicken und dann den Inhalt setzen, das geht direkt zum Inhalt. Was passiert ist, dass sie das verwenden , was wir als Layout bezeichnen. Oder damals nennen wir es eine Vorlage oder ein Meisterwerk, wo sie das Temporäre einmal anlegen, einmal anlegen anstatt diese Vorlage jedes einzelne PDF, 20 Seiten zu wiederholen, zu wiederholen und zu wiederholen, zu wiederholen, zu wiederholen, zu wiederholen. du musst diese Vorlage wiederholen? Ja, auf einer Basiswebsite ist es absolut notwendig. Aber was sie getan haben, war eine Art Abstracts, die beschäftigt sind. Denken Sie noch einmal daran, dass Frameworks eingerichtet sind, um die Wiederholungen zu reduzieren oder die Wahrscheinlichkeit zu verringern, dass Sie bestimmte Dinge wiederholen müssen. Weil sie wissen, dass Sie jedes Mal mit dieser HTML-Vorlage zu tun haben. Als sie eine.net-Core-Framework entwickelten, haben sie gleichzeitig erstellt und dann ermöglicht es Ihnen die verschiedenen pH-Werte in diesem Bereich zu rendern , der als Renderkörper bezeichnet wird. Was wirklich passiert , ist, dass jede Seite immer das HTML-Tag, das Head-Tag, haben wird. Dies ist global festgelegt COC, es ist immer mit den Stylesheets verknüpft , sodass Sie dies nicht auf jeder einzelnen Seite tun müssen . Sie haben das Körper-Tag, das das Header-Ohr mit dem Nerv haben wird , sodass Sie auf jeder einzelnen Seite nicht genug erstellen müssen. Und dann wirst du immer diese Div-Klasse mit Container haben . Denken Sie daran, dass wir uns das angesehen haben, diese Div-Klasse ist gleich dem Container. Und dann ja, du wirst ein paar neue Tags sehen. Du darfst sie benutzen, du darfst sie zu diesem Zeitpunkt nie benutzen. Das musst du nicht wirklich. Ich mache mir Sorgen darüber, aber der Punkt ist, dass sich jeder Grund, aus dem PG erstellt, automatisch in diesem Bereich gerendert wird, innerhalb dieser Gesamtvorlage liegt. Um Sie hier zu lesen, ändern Sie das lokale, die Layouts, leider von allen Seiten weltweit. Dies ist eine einfachere Art Ihre Website zu pflegen, da Sie dies jetzt nicht auf allen Seiten tun müssen , wie wir es gesehen hätten wenn wir das grundlegende HTML und CSS machen. All das ist hier irgendwie angelegt. Sie sehen die Skripteinschlüsse unten auf der Seite und Sie können alles ändern. Lassen Sie uns zum Beispiel sehen, dass das, was für uns automatisch generiert wurde der Titel „Daten anzeigen“ der Seite sein würde. Wenn wir zu unserer Indexseite zurückkehren, würden wir sehen, dass der Datentyp der Ansicht gleich der Startseite ist. Das wird anstelle Ihres Datentitels gerendert. Das ist also wie eine Variable und ein Platzhalter für alles, was einen pH-Wert angibt, den wir haben. Wieder einmal wird der Titel Browser in der Wanne angezeigt. Ich wollte dies von einem Text zu einer Autobuchungsanwendung ändern . Etwas menschenlesbarer. Aber das ist der Titel in der Navbar, tut mir leid, in der Wanne des Browsers, dann hat die Navbar auch Carb nachschlagen, genau hier geschrieben. Was ich also tun werde, ist Kontrolle und F5 und diese Schiene läuft ohne Debuggen. Und wenn diese App auftaucht, möchte ich das erste, was Sie zur Kenntnis nehmen, die Tatsache , dass dies Homepage sagt. Das lädt also die Indexseite. Falls du nicht glaubst, dass es da ist. Index es heißt Homepage, oder? Es wird also die Homepage oder die Indexseite für die Buchungsanwendung für Dashcar geladen . Das sind statische Texte, die wir in den Titel eingefügt haben. Alles klar, was ist, wenn ich diesen Text hier aktualisieren wollte ? Ich will auch nicht sagen, dass Carb da oben anhakt. Also. Ich kann den Code finden, der genau hier ist. Und ich werde es in den Antrag für die Fahrzeugbuchung ändern. Ich rette etwas Humor. Sparen Sie immer. Leider habe ich nicht gesehen sie AutoCAD in Visual Studio implementieren. Das wäre sehr cool gewesen, aber ich denke, sie haben es nicht getan, sie haben es aus gutem Grund nicht getan. Aber nachdem ich diese Änderung vorgenommen habe, gehe ich einfach zu Control und aktualisiere meinen Browser. Und siehe da, wir sehen, dass die Änderung vorgenommen wird und diese Veränderung noch einmal, diese globalen. Wenn ich also auf den Datenschutz für Go on home gehe, jede dieser Seiten nur erbt jede dieser Seiten nur vom Gesamtlayout. Also werde ich es einfach auch in der Fußzeile aktualisieren. Ich kann einfach rübergehen, es in der Fußzeile ändern. Wenn überhaupt, wollte ich betrügen und scheren. Ich meine, das heißt 2021, wenn ich es auf 2022 aktualisieren oder nicht nur Privatsphäre anzeigen musste , was immer ich einsetzen muss, all das wird global aktualisiert. Nachdem ich diese Änderung vorgenommen habe, werde ich mich nur noch einmal aktualisieren. Und du siehst, dass die Veränderung nicht widerspiegelt. So einfach ist es, sich global wirklich zu verändern, oder? Wenn Sie nun die Seiten ändern möchten, ist es nur ein Haufen HTML. Also hier ist was ich tun wollte. Ich werde antique das HTML aus unserer Basics-Klasse ausführen , die wir auf unserer Indexseite hatten. Und ich werde es einfach auf diese neue Indexseite schlagen und mal sehen, was passiert. Hier ist also unser HTML aus den Grundlagen. Was noch einmal passiert, ist, dass wir nicht alle diese Tags benötigen. Es wird das brauchen, den HTML-Text alles was ich wirklich will. Ich brauche den Container nicht mal. Ich erinnere mich, dass wir Kantian wiederholen mussten oder wir müssen den Roman überall wiederholen. Und dann fügen wir ein Div für den Inhalt hinzu. Nun, was im Inhalt ist, ist das, was wir wirklich brauchen, was auf der Seite angezeigt wird. Wir brauchen auch keine Fußzeile, weil wir unsere Fußzeile haben. Ich nehme einfach all diese Inhalte. Ich mache mir keine Sorgen darüber dass der Button funktioniert noch nicht. Nun, ich werde einfach den Standardinhalt ersetzen , der versucht wurde , durch OER-Inhalte aus unserem Kurs. Ich bin gegangen, um das zu speichern und schaue mir das dann an. Nirgends sehen wir, dass wir die Seiten einfach auf die gleiche Weise ändern können. Das einzige ist, dass wir unser Skelett nicht jedes Mal wiederholen müssen , was für uns getan wird. Wir brauchen nur den Inhalt. Beachten Sie, dass alle Klassen immer noch für die Anzeigen der Tasten und für die Hunde und die Schrift funktionieren . Warum? Weil die CSS-Datei für Bootstrap bereits im Lieferumfang enthalten ist. Sie geben uns diese Bootstrap-Datei bereits. Eine Sache ist, dass wir um fünf sind. Das könnte sich in Zukunft ändern, aber der richtige Knoten, der Bootstrap-Bibliothek ist, kann ich den ganzen Weg nach unten bohren und das physische Fett sehen. Als ich es sagte, erleichtern sie Ihnen den Zugriff. Alles was du wirklich brauchst ist dieser Tilde-Schrägstrich. Und dann wird es Ihnen alle Ordner in der Hierarchie der Ordner von Dub, Dub, Dub root geben. Wenn ich zu der CSS-Datei kommen wollte, die sich in meiner Site CSS befindet, oder ich wollte zum CSS-Ordner gehen und sage es heute, dann schrägst du, und dann fängt es an alle Ordner für mich aufzulisten. Ich wollte zur CSS-Akte kommen. In Ordnung, deshalb habe ich gesagt, dass alle Ihre statischen Dateien , auf die Sie zugreifen müssen , in den Dub-, Dub-, Dub-Root-Ordner gelangen können , und das wird es sehr einfach machen. Aber ich habe darauf hingewiesen, dass wir bis zur Bootstrap-Datei bohren können . Und die Bootstrap-Version, die wir aus der Box holen, ist 4.3.1. In den Grundlagen haben wir uns mit fünf angeschaut, aber dann werden wir mit dieser Vorlage nur Bootstrap, Bootstrap-Wälder erledigt , tut mir leid, was keine große Sache ist, weil die Unterschiede zwischen den beiden nicht so groß sind eines Deals. Und die Dokumentation ist immer da für den Fall Sie etwas von einem verwenden dass Sie etwas von einem verwenden, das in der anderen nicht verfügbar ist, als würden Sie nicht sehen, dass ich versuche Bootstrap für Klassen zu verwenden , die nicht in Bootstrap sind F5, das können Sie immer noch einmal überprüfen. In Ordnung, jetzt haben wir ein besseres Verständnis dafür, wie das Layout und die Dateien im Allgemeinen funktionieren. Und es gibt noch andere Dateien, LED-View-Importe und View-Start. Wenn Sie im Grunde anfangen, verwenden Sie einfach diese Layoutdatei. Wenn wir also mehrere Layouts haben, können wir tatsächlich ein anderes Layout erstellen. Wenn Sie möchten, dass ein Benutzertyp ein Layout und ein anderer Benutzertyp ein anderes Layout sieht oder verschiedene Layouts pro Seite hat, was auch immer es ist, können Sie tatsächlich diktieren, welches man sollte benutzt werden. All diese Dinge werden zu gegebener Zeit kommen. Also setze ich einfach den Rundgang durch die Dateien und Ordner fort . Und lass uns zur App settings.js übergehen. In der App settings.js ist Zen wie eine Konfigurationsdatei, in der wir im Grunde Dinge wie Verbindungszeichenfolgen festlegen. Sie wissen, wo Sie in statischen Einstellungen nach der Datenbank suchen in statischen Einstellungen nach der Datenbank müssen , die wir haben müssen, um sicherzustellen , dass bestimmte Funktionen auf bestimmte Weise weiterlaufen. All diese Dinge können in dieser App-Einstellungsdatei definiert werden. Wir haben die program.cs, die dem sehr ähnlich ist , was wir in unserem C-Sharp in verschiedenen Bereichen gesehen hätten, wo wir jedes Mal, wenn wir ein neues Projekt erstellt haben, eine Datei namens program.cs hatten , die gebunden ist up-Methode namens „Mean“. Es ist das Gleiche, program.cs, Und hier ist unsere Hauptmethode. Alles, was passiert, ist, dass, wenn Sie IS Express drücken, unser Hitzestart im Grunde genommen nur das Programm aufrufen und die mittlere Methode aufrufen. Und die Hauptmethode sagt, dass Sie die Anwendung erstellen und ausführen. Wo weiß es also, welche Konfigurationen eingerichtet werden sollen? Es verwendet die Startdatei und Start hier repräsentiert den Start der CS-Datei, die ein weiterer Ort ist, an dem Konfigurationen leben. Hier im Startup-Konstruktor sehen Sie, dass sie das tun, was wir Injection nennen. Später kommen Sie also auf einen Standard, aber sie injizieren ein Objekt der KI-Konfiguration , das OER up settings.js JSON-Datei darstellt . Wenn Sie also welche statischen Einstellungen wir dort vornehmen, können wir auf sie zugreifen und dann per Code, bis diese Konfiguration verwendet wird , wenn Sie diese Funktion initialisieren. In der Starterdatei findet also im Grunde die gesamte Feature-Initialisierung statt. Da Sie hier sehen, sehen wir Punktadresse oder Seiten der Dienste später eine Punktadresse oder Seiten der Dienste, wenn wir dem Projekt Authentifizierung und andere Dinge hinzufügen . Sie werden sehen, dass wir hierher kommen und es wissen lassen müssen. Okay, bitte benutze dieses Modul, bitte benutze diese Middleware, bitte benutze diese Funktion, die wir dieser Datei hinzufügen werden , wenn die Anwendung wächst. Der Startpunkt CSS ist wirklich nur dafür verantwortlich diktieren, was bis zum Start der Anwendung vorhanden sein sollte . Wenn ich also etwas in dieser Datei oder bestimmte Dinge in dieser Datei vermassele , was wäre, wenn ich zu dieser Zeile kommen würde da ich diese Zeile nicht für nützlich halte. Und dann habe ich versucht zu laufen, dann wird dieser Fehler angezeigt, der besagt, dass zwischen dem, was ich tun möchte, und den Funktionen, die mir zur Verfügung stehen, eine gewisse Übereinstimmung gibt zwischen dem, was ich tun möchte, und den Funktionen, die mir zur Verfügung stehen, eine gewisse Übereinstimmung ich tun möchte, und den Funktionen, die mir zur Verfügung stehen , ohne zu versuchen, diesen Pfeil zu lesen -Wort. Im Grunde habe ich gesehen , dass Sie versuchen, die Laufzeitkompilierung zu initialisieren, aber ich habe nicht gesehen, wo Sie mir gesagt haben, dass ich das Feature für die Laufzeitkompilierung verwenden kann . Diese Zeile, die ich kommentiert habe, ist ein wesentlicher Bestandteil der Funktionen , die an anderer Stelle in der Anwendung aufgerufen werden müssen. Wenn Sie also weitermachen und verstehen, wer .NET Core funktioniert, werden Sie verstehen, welche Bibliotheken wohin gehen müssen. Wieder einmal müssen Sie sich das nicht merken. Sie müssen nur eine gute Vorstellung davon haben wie dieses Ding funktioniert, damit Sie, wenn Sie eine neue Funktion wünschen, richtig recherchieren können, um herauszufinden , was genau Sie einbeziehen müssen , um es in Betrieb zu nehmen . Das ist es wirklich für den Rundgang durch die Ordnerstruktur. Wenn wir wiederkommen, arbeiten wir ein bisschen mehr an unserer Schnittstelle und untersuchen, wie alles verkabelt ist. 4. Razor-Syntax verstehen: Willkommen zurück Leute. In dieser Lektion werden wir uns ansehen, wie wir mit unseren Pfirsicharrays experimentieren können. Ich ignoriere den pHS-Modifikator oder genug Balken und schaue mir sogar an, wie wir unsere Aufregung wahrscheinlich an verschiedene Orte injizieren können , ähnlich wie wir gesehen haben, dass sie in das Startup injiziert wurde. Beginnen wir also damit, zu verstehen, was wir wollten. Also erstelle ich eine sehr einfache Seite. Ich schließe nur alle beschriebenen Anweisungen. Und dann erstelle ich auf Seiten einen neuen Ordner. Das ist also immer eine gute Idee, denn wenn Sie die verschiedenen Bereiche haben, passiert es, dass Sie drei Hauptoperationen haben. Erstellen, lesen, aktualisieren, löschen. Meistens möchten Sie also einen Ordner erstellen. Und dann hätten Sie innerhalb dieses Ordners die verschiedenen Seiten, um die verschiedenen Funktionen zu unterstützen. Da wir Autobuchungen machen, müssten wir wahrscheinlich zuerst die Autos haben. Alles klar, also werde ich eine Mappe namens Cars haben. Und in diesem Ordner für die Autos hätte ich eine Indexdatei, die die erste Seite darstellt, auf der Sie landen, wenn Sie für den Blick auf Autos stimmen , was normalerweise der Liste der Autos entspricht. Sie haben die Bearbeitung, Sie haben das Löschen und Sie müssen lesen, was bedeutet, dass ich mir eine bestimmte Fahrzeugdetails ansehe. Wir sind nicht bereit, auf all diese Komplikationen einzugehen. Ich erkläre nur, warum wir diese Ordnerstruktur haben , die Sie während dieses Kurses und in den meisten Webanwendungen als allgemeines Thema ansehen werden während dieses Kurses und in den meisten Webanwendungen als allgemeines Thema , unabhängig von der Technologie oder dem Bestand in Autos verwendet, erstellen wir eine Indexdatei. Also gehe ich einfach weiter und klicke mit der rechten Maustaste und klicke auf „ Gehe zur Rasiermesser-Seite hinzufügen“. Und was wir hier machen, ist die Gerüstwerkzeuge zu verwenden. Die Gerüstwerkzeuge ermöglichen es uns, Dateien zu generieren. Ich schätze, Microsoft hat gesehen, dass wir die Art von Dateien kennen, die wir wollten, unser Framework. Und das sind Dinge , die Sie h mal manuell wiederholen müssten . Also hier ist das Gerüstwerkzeug. Verwenden Sie dies und wir werden den größten Teil der schweren Arbeit erledigen, indem wir alle B6 einsetzen, um sicherzustellen, dass Sie nichts vergessen und von dort aus weitermachen können. Also schätze ich, deshalb haben sie uns dieses nette Werkzeug gegeben. Wir werden nur einen leeren ErgebnispH-Wert für nein erstellen, ich bin auf Add geklickt und ich nenne es index.html, CSS HTML, und es ist bereits für mich da. Also gehe ich einfach weiter und klicke auf „Hinzufügen“. Jetzt habe ich diese neue Indexdatei. Wenn wir also noch einmal hinschauen, sehen wir Seiten Slash Cars Slash Index, dass ich Ihnen nur eine Vorstellung von der URL gebe Ihnen nur eine Vorstellung von der URL da der Index immer die erste Datei sein wird. Wenn wir also zu Slash Cars gehen, wird automatisch nach der Indexdatei gesucht, um diese zuerst zu laden. Okay, also was wir hier machen wollen, sage ich Daten anzeigen. Wir werden dieses Zeug selbst manuell tippen. Ich wollte Titel sagen. Denken Sie daran, dass der Datentyp angezeigt wird, ist ein Platzhalter, der in das Layout einspeist. Und ich werde nur die Autoliste sehen. In Ordnung? Was ich tun möchte, ist einfach H1, eine Liste der Autos, einige Dinge einfach zu sagen . Wir sind nicht bereit, zu kompliziert zu werden oder einfach nur zu schwitzen oder Appetit zu verstehen und was zu verstehen, und wenn Sie sich diese Indexseite ansehen, werden Sie feststellen, dass sie der anderen Indexseite sehr ähnlich aussieht . Der Grund, warum die Indexseiten nicht berühren , ist , dass die Unterordner, in denen sie sich befinden, unterschiedlich sind. Dieser Index befindet sich auf den allgemeinen Seiten, also ist dies die gesamte Seite der gesamten Anwendung. Wenn wir jedoch in die Slash-Autos gehen, haben Smash-Autos eine eigene erste Seite und Indexdatei wird anders sein, aber es wird sehen, dass sie dieselben direkten 2s haben. Dies ist eine Seite, hier ist ein Modell und verwendet den Namespace für dieses Modell im Vergleich zum Namespace für den anderen. Wieder einmal erhalten wir unsere Code hinter Datei für unser Indexmodell. Wenn ich zu dieser neuen Seite navigieren wollte, müsste ich meine Allele ändern und die Navigationsleiste den neuen Link haben lassen. Also kopiere ich einfach einen, der dort existiert. Ich kopiere einfach den bestehenden Homepage-Link und ändere alles, um es zu sehen, damit wir keinen Bereich haben. Wir haben die ASP-Seite. Wo wird der ASP bezahlt? Die ASP-Seiten schrägen den Index also nicht mehr. Es ist Slash-Cars-Slash-Index. Beachten Sie, dass wir die Erweiterung nicht unbedingt benötigen , wo wir die Erweiterung nicht benötigen. Hier haben sie einige der Dinge behindert , die wir mit ba, grundlegendem HTML, gewohnt sind. Denn wenn man es genau anschaut, gibt es hier kein H-Drift-Tag. Ich sage nicht, dass wir eine Natur nicht gebrauchen können, wenn wir könnten. Wir könnten sagen, h ist gleich dem Hintern. Wenn wir sehen, dass hf gleich dem Erstellen der genauen URL ist , um von Anwendung zu Seite zu gelangen , wird das Auto etwas schwierig sein, weil wir nicht einfach den Dateinamen sehen können einfach den Dateinamen sehen Erweiterung, als könnten wir CSS und HTML nicht grundlegend sein. Was sie uns gegeben haben, nennt man Tag-Helfer, wo sie basierend auf dem Pfad der Ordnerstruktur nur 0 mir sagen . Und ich werde diesen H-Ref für dich generieren. ASP-Seite ist also gleich, und ich weiß, dass ich gehen muss, um Autos zu schneiden. Der erste Schrägstrich bedeutet also die Wurzel der Anwendung. Dann muss ich in die Auto-Mappe gehen . Ich musste nicht zur Indexdatei gehen . Dort sollte dieser Link hinführen. Es wird das H-Riff zur Laufzeit erzeugen. werden wir in ein paar sehen. Also möchte ich, dass das Autos sagt. In Ordnung, also haben wir jetzt eine neue URL mit einer neuen Seite. Und ich werde weitermachen und rennen wie, oh, wir machen nur User Interface Sachen. Wir können einfach Control F5 machen. Wir müssen nicht jedes Mal debuggen , da dieser Weg etwas schneller ist. Jetzt laden wir unsere Anwendungsseite. Denken Sie daran, dass dies unsere Homepage ist, die wir von unseren statischen Dateien migriert haben. Und wenn Sie die anderen migrieren wollten, werde ich wahrscheinlich auch eine gute Praxis für Sie sein. Aber im Moment fangen wir damit an. Und wenn ich dann auf Autos klicke, bevor ich überhaupt auf Autos klicke, ist es inspizieren Element. Inspect Element wird uns die H-Referenz zeigen , wie wir dorthin gelangen. Wenn man sich die Angst vor den Vorhöfen anschaut, heißt es EHR-Schrägstrich, das heißt nach Hause gehen. Slash-Autos bedeutet Ziel von der Basis-URL, was wir im Browser sehen, localhost mit dieser Portnummer Slash-Autos. Wenn wir uns das ansehen, werden Sie sehen, dass localhost den Datenschutz einschränkt. Wenn ich weiterfahre und die Autos treffe. Dann sehe ich, dass ich auf meiner neuen Seite landete, die eine Liste der Karten ist. Du siehst, dass es nicht einmal besonders index.html sagen musste. Denn standardmäßig wird der Browser überall zuerst zur Indexseite gehen. Das ist also alles, was man braucht, um einen neuen Link zu erstellen und die Seiten dazu zu bringen, sich gegenseitig zu sehen. Alles klar, jetzt schauen wir uns die Codedatei an und die HTML-Datei kann damit interagieren. Im Moment zeige ich diese Liste der Autotexte direkt auf der Seite an. Dies ist möglicherweise nicht immer der Fall, wie wir gesehen haben , als wir die C Sharp-Codierung machten. Manchmal die Daten, die aus Benutzereingaben angezeigt oder mit diesen dynamischen Interaktionen interagiert werden müssen . Es muss irgendwie in einer Variablen sein, aber wir müssen es immer noch anzeigen. Was wäre, wenn ich dieses Textstück in eine Variable in die Codedatei einfügen und dann anzeigen lassen wollte . Also werde ich es einfach in die Codedatei schneiden. Was ich innerhalb unserer Klasse machen werde , ist, ihr eine neue Immobilie zu geben . Also sage ich einfach Requisite, drücke zweimal Tab und dann sage ich String. Und das wird dann auf get one treffen, die Seite lädt diese Methode namens get ist die erste Methode, die aufgerufen wird. Jedes Mal, wenn Sie zu einer Seite navigieren, klicken Sie darauf und holen Sie sich alles, was Sie für diese Seite vorbereiten möchten. Wenn Sie Daten laden müssen, wenn Sie auf eine Nachricht sitzen müssen, wie wir es tun werden, müssen Sie sicherstellen, dass Sie dies auf Git tun. All dies ist bereit, müssen Sie sicherstellen, dass Sie dies auf Git tun. All dies ist bereit, wenn der pH-Wert auf den Benutzer geladen wird . In diesem Fall möchte ich sehen, Überschrift den Tics entspricht, die ich gerade gebunden habe, nämlich eine Liste der Autos. Nein, ich bereite diese Variable vor. Ich stelle sicher, dass der Wert vor dem Patienten verfügbar ist oder wie mache ich den Wert auf der Seite angezeigt? Nun, auf der Seite selbst, wo immer ich es will, die zwischen diesen H1-Tags liegen würde. Und dann nennen wir das Radiergummi Rasiermesser Ansichten oder erheben eine Syntax. Vielmehr ermöglicht die Syntax es uns, einen C-Sharp-Code mit unserem HTML-Code zu verweben. In Ordnung? Jedes Mal, wenn Sie eine Anzeige sehen, die besagt, dass Sie darauf vorbereitet, C-Sharp-Code zu schreiben, denn dies ist C-Sharp-Code , der ein Namespace von C-Sharp ist. Dennoch sehen wir HTML im pH. Okay, also lass mich dir zeigen, ob ich etwas von der C-scharfen Seite anstelle von HTML drucken möchte , alles was ich brauche ist auf dem Zeichen. Grundsätzlich ist seit dieser Direktive, die Sie C-Sharp eingeben, Sie C-Sharp eingeben, kein Modell wie eine statische Variable oder eine globale Variable, die ein Objekt des Modells darstellt , nämlich der Code allem, was im Code hinter einer Datei wie dieser Überschrift öffentlich ist , steht mir jetzt zur Verfügung, da ich den Modellpunkt sehe. Dann erhalte ich alle Eigenschaften des Modells einschließlich meiner benutzerdefinierten. Du wirst einige sehen, die du nicht reingesteckt hast. Kein Problem, lass dich nicht entmutigen, sei nicht nervös oder so. Aber wenn du genau hinsiehst, siehst du Schlagen. Das ist der, den ich gerade erstellt habe. Ich kann einfach die Überschrift model.py sagen. Und wenn ich das speichere und dann die Seite aktualisiere und was du tun kannst, während du an diesem Punkt bist, kannst du immer einfach einen Build mit Control Shift und B machen Und dann kannst du die Seite einfach aktualisieren. Sie haben wahrscheinlich immer noch geöffnet , als Sie debuggen. Aber dann siehst du hier, dass wir immer noch eine Liste von Autos sehen. Und wenn Sie das Element untersuchen, gibt es keinen Hinweis darauf, dass es sich um C-Sharp oder HTML handelt. Was Brasilien anbelangt, es nur den HTML-Code. Das ist also ein polares Angebot ist eine Syntax. Wir können dynamisch alles dorthin bringen. Wenn ich die Überschrift ändern wollte anstatt die ganze Seite zu pflegen. Was wäre, wenn ich anzeigen müsste , das mehrere Stellen einnimmt anstatt dass die statische Basis mehrere Basen verwendet, ich lege es in eine Variable ein. Hier. Ich ändere es von der Variablen, nur damit wir wissen, dass es funktioniert. Und ich bin gegangen, um einen Build zu machen. Sobald dieser Build fertig ist, werde ich eine Aktualisierung durchführen. Und dann C, Los geht's. Das Zeug Autos von variabel. Das macht es so viel einfacher, eine dynamische Seite zu erstellen , auf der wir möglicherweise den Text im laufenden Betrieb ändern müssen. Wir ändern es einmal. Und dann können wir einfach so oft in unserem Code darauf verweisen , wie wir wollen. Anders als zu unserer Zeit, als wir unsere statischen Seiten gemacht haben und wenn wir zusammenfassen, müssen wir manuell gehen und ändern. Es ist überall. Das können wir hier machen, einfach nett und einfach. Wenn ich also repliziere, dass alle diese Seiten überkreuzt sind oder alle diese Tags sind, ist es da. Wenn ich es einmal ändere, hat es sich so oft geändert. In Ordnung, das ist also eine nette und einfache Art zu verstehen, wie die Syntax funktioniert. Wie können wir etwas in die Codedatei und innerhalb der Razor-Seite darauf zugreifen. Als Nächstes zeige ich Ihnen unser erstes bisschen von dem, was wir als Dependency Injection bezeichnen. Was wir also tun werden , ist diesen Überschriftentext aus der C-sharp Variablen hier zu verschieben . Und wir werden es in die App-Einstellungen einfügen und dann zeigen wir ein Ganzes, Sie können einfach einen Abszess injizieren. Diese Konfigurationen essen ganz einfach und zeigen sie auf der Seite genauso an. 5. Nachricht aus Einstellungen: Jetzt werden wir uns ansehen, wie wir Abhängigkeiten in unseren pH-Wert injizieren und auf Daten auf genau das zugreifen können unseren pH-Wert injizieren und auf Daten auf genau das zugreifen , was wir als entkoppelt bezeichnen. Das ist also eines der vier meisten und Marquee-Funktionen der Downlink-Abfrage macht das, was wir als Abhängigkeitsinjektion bezeichnen, was ein sehr wichtiges Prinzip in der soliden Entwicklung ist. Das D im Wort Solid bedeutet eigentlich Abhängigkeitsinjektion. So solide ist eine Reihe von Prinzipien, die uns helfen würden, saubere und gute Kodierungspraktiken zu praktizieren. Und die Abhängigkeitsinjektion ist sehr wichtig. und.NET Core Mix Abhängigkeitsinjektion, sehr, sehr einfach für uns. Was wir tun werden, ist in der JSON-Datei der App-Einstellungen, ich in eine neue Konfiguration einfüge. Und wieder einmal dient dies nur zu Demozwecken, nur damit wir verstehen können , wie alles fließt und alles. Also werden wir einfach ein Komma setzen. Und dann habe ich einen neuen Abschnitt oder einen neuen Knoten erstellt , um zu sagen, dass dies eine Nachricht ist. Also nenne ich diese eine Nachricht. Was wir also haben, ist im Grunde wie ein Schlüssel- und Wertpaar. Also hier erstelle ich mein Volume und sie sind alle durch Komma getrennt. Sie bemerken, dass die Protokollierung der Schlüssel ist und dann der Wert das ist, was wir als Objekt bezeichnen. Und das Objekt hat einen Schlüssel , der sich in einem anderen Objekt befindet, und jeder Schlüssel hat seinen eigenen Wert. Jedes Mal, wenn Sie einen Doppelpunkt sehen, ist rechts der Wert, was links ist, ist der Schlüssel. Und dann trennt das Komma die Hauptknoten. Dies ist also ein Min-Knoten, der einen Load-Hosts trennt, was ein anderer Load - oder Vardy-Schlüssel-Peering ist. Und dann ist das Komma. Wir erstellen also unsere eigene gültige Schlüsselpaarbotschaft. Und dann ist das eine grundlegende JSON-Syntax. Nett und leicht zu verstehen. Die Nachricht wird den Wert haben. Dies ist die Liste der Autos. Einfache Botschaft der Lektion. Nichts zu ausgefallenes. Weißt du, ich habe das in den entgegengesetzten Dingen gesagt. Wie greife ich auf diesen Text auf der Seite zu, um dem Benutzer die DNA weiter anzuzeigen. Was wir also tun müssen, ist zu unserer HTML-Datei index.js zu gehen. Ich erstelle eine andere Immobilie. Ich nenne das eine Fehlschläge. Um also seine Kontrolle D oder Control CNV zu duplizieren, ähnlich dem Visa Studio-Code, funktioniert Control D auch. Ich habe eine andere Immobilie. Ich nenne es Nachricht. Und ich muss eine Nachricht setzen, um den Wert aus der entgegengesetzten Dings-Datei zu haben, was bedeutet, dass ich auf die Konfiguration zugreifen muss. Genau wie wir es in der Startdatei besprochen haben, haben wir hier das Konfigurationsobjekt injiziert. Und dann erlaubte uns das, auf alles zuzugreifen, oder zumindest lade ich sie, weil wir das nicht geschrieben haben. Wer auch immer das geschrieben hat , hat diese Injektion gemacht , damit er auf die Konfiguration zugreifen konnte , die dies tun wird. Wir werden diesem Modell folgen. Die Prinzipien der Abhängigkeitsinjektion eins, Sie haben einen Konstruktor, also schreiben wir C TOR zweimal Tab drücken und dann bekommen wir den Konstruktor. Es beginnt mit Parameterlisten, was in Ordnung ist. Aber dann müssen wir ihm sagen, welchen Abhängigkeiten es helfen sollte. Also werde ich ihm sagen, dass es I-Konfiguration verwenden sollte . Und wenn du willst, kannst du einfach in das Startup über CS gehen und du kannst es konfigurieren. Und wir rufen die Variablenkonfiguration auf. Rote Linie bedeutet, dass wir eine Bibliothek brauchen, also Steuerpunkt und ich können einfach weitermachen und Enter drücken. Es wird also die using-Anweisung enthalten. Also machen wir das einfach und bekommen die using-Anweisung rote Linie verschwindet. Nein, ich muss es initialisieren. Also sage ich ihm, dass ich die Icon-Figuration von der Umkehrung des Kontrollbehälters brauche der Umkehrung des Kontrollbehälters oder ich sehe Container. Der Start legt grundsätzlich alles in diesen Container zwischen dem Start der Datei program.cs. Sie legen diese Dinge in den Container und dann ich überall in meiner Anwendung kann ich überall in meiner Anwendung vom Container aus darauf zugreifen. Also habe buchstäblich alles geladen, alles aus dieser App-Einstellungsdatei in diesen Container. Und ich sehe, dass ich Zugriff auf diese Datei haben möchte, die dann für diesen Typ namens uigurische Konfiguration behindert ist . Ich brauche eine lokale Variable , die ich verwenden kann, während ich auf dieser Seite zugreifen kann, wie eine Kopie. Was ich also tun werde , ist einfach Kontrollkanal zu sagen , nachdem ich ihn in den Konstruktor gelegt habe. Und dann sagte ich „Feldkonfiguration erstellen und zuweisen“, und das macht diesen Injektionsprozess automatisch für mich. Jetzt habe ich diese lokale Version nur damit wir sie anders sehen können. Ich nenne das einen Unterstrich. Und ich neige dazu, das mit meinen Feldern der Score-Konfiguration und Steuerpunkten zu tun, um überall sonst umzubenennen, damit dieser Fehler beseitigt wird. Jetzt, da wir dieses Konfigurationsobjekt eingespritzt haben und initialisiert und für die Seite zugänglich sind. Ich kann jetzt sagen, dass meine Nachricht der Konfiguration entsprechen sollte. Alles klar? Das Konfigurationsobjekt ermöglicht es mir zu sehen, geben Sie mir den Schlüssel zu dem, auf das Sie zugreifen möchten, damit Sie daran denken, dass wir gerade das Schlüssel-Wert-Paar besprochen haben, der Schlüssel ist , den ich auf die Nachricht zugreifen wollte. Ich werde sehen, dass der Schlüssel Botschaft ist. Denken Sie daran von IRAs, es ist im Grunde ein Array. Diese Datei wird im Grunde in ein Array verwandelt , auf das ich jetzt mit dem Schlüssel als Tiefpunkt zugreifen kann . Sobald ich das getan habe, habe ich jetzt eine neue Variable namens message, auf die meine Indexseite zugegriffen werden kann. Also kann ich unter der Überschrift vielleicht ein h4-Tags einlegen. Und dann trennen wir sie einfach mit einem HR-Tag. wird ein bisschen schick damit. Und ich wollte sagen, ich würde Model Dot unterschreiben. Und dann denken Sie daran , dass, sobald ich sage model.py Zugriff auf alle Eigenschaften hat dass model.py Zugriff auf alle Eigenschaften hat, die sich innerhalb der Modellklasse befinden, auf die Nachricht zugreifen kann. Keine Nachricht ist nicht nur etwas, das wir getippt und in eine Variable eingefügt haben. Botschaft kommt von der Aufregung zurecht. Siehst du, wie weit sind wir, die ärgerlich sind? Es hat den Wert und das Schlüsselpaar für die Nachricht. Und dann lade auf der Seite hoch. Ich sehe, wenn Sie diese Seite laden, möchte ich eine Kopie dieses Objekts aus der Abhängigkeit oder dem IOC-Container erhalten. Und ich erstelle meine Kopie lokal. Und dann kann ich im Handumdrehen sehen wo die Seite geladen wird, zu dieser lokalen Kopie aus der App-Einstellungsdatei gehen und mir den Wert besorgen, der die Schlüsselmeldung enthält. Wenn ich das alles mache, kann ich einen Build machen. Und ich habe meine Seite immer noch früher vom Debuggen und du siehst es nur Updates für mich? Nein. Ich sehe, dass diese Nachricht aus der App-Einstellungsdatei kommt . Das ist im Grunde alles, was Dependency Injection funktioniert, wenn die Anwendung wächst. Davon werden wir definitiv mehr sehen. Aber zumindest ist dies ein netter kleiner Überblick wie Sie tatsächlich auf Daten aus anderen Teilen der Anwendung zugreifen und sie trotzdem auf der Seite anzeigen lassen können. Und Ihre Benutzer wären niemals klüger, woher diese Daten stammen, sei es eine Datenbank oder eine Variable im Hintergrund. Aber wir haben die Kontrolle, also wissen wir, wie wir es dynamisch machen können. Die Benutzer sehen nur eine sehr statische Seite, laden sie zu ihnen. 6. Entity Framework: Bisher haben wir uns einige der Grundlagen angesehen , wie wir Razor-Seiten dazu bringen können , dynamische Daten anzuzeigen , die aus unserem C-Sharp-Code stammen. Die Realität ist jedoch, dass wir in unserem Szenario nicht wirklich fest codieren diese Art von Werten nicht wirklich fest codieren und Variablen einfügen und anzeigen, insbesondere angesichts der Art von Anwendung, die wir sind building , eine Autobuchungsanwendung, bei der Sie Liste von Karten benötigen, die sich nachweislich ändern. Ein neues Auto kommt in die Firma, man wird in den Ruhestand gesetzt usw. Wo wir nach der Buchung gefahren sind. Was wir also tun müssen, ist einen sehr dynamischen Weg zu finden , um diese Art von Daten tatsächlich zu speichern. Dann müssen wir die Dienste von Entity Framework einsetzen , damit wir eins erstellen können , die Datenbank für die Interaktion mit der Datenbank und drei weiter auf der Datenbank aufbauen können. Was wir tun werden, bevor wir auf eine der Komplikationen eingehen , ist, alt zu sein, was wir speichern müssen, wir werden es relativ einfach machen, aber es ist kompliziert genug, dass wir es bekommen können gute Vorstellung davon, was in einem allgemeinen Szenario behandelt werden muss . Was wir tun wollen, ist das S in solidem zu beschäftigen, was die Trennung der Sorgen ist. Und das Prinzip dahinter ist eins, eine Methode oder eine Datei sollte niemals mehr als eine Verantwortung tragen. Deshalb ist es gut, dass es für jede Seite eine dedizierte Codedatei gibt. Die gesamte Verantwortung dieser Codedatei liegt also für diese Seite. Was wir tun werden, ist nur Akten abzunehmen und wir werden es auf Projekte anwenden. Jetzt, da wir über Datenbankinteraktionen nachdenken, müssen wir ein anderes Projekt erstellen , das alle unsere datenbankbezogenen Objekte hosten oder vollständig enthält. Ich werde nur die Autobuchung minimieren oder zusammenbrechen und bin direkt zur Lösung gegangen. Klicken Sie auf Hinzufügen. Und ich werde ein neues Projekt erstellen. Aus dieser Projektliste wählen wir eine Klassenbibliothek aus. Wenn Sie es also in den letzten Projekten nicht haben , können Sie immer suchen. Was wir wollen, ist eine C-Sharp-Klassenbibliothek. Sie können das auswählen und wir rufen diesen aktuellen Buchungspunkt Theta an. Der Name wird also bedeuten, dass dies das Datenprojekt ist. Hit Next, und wir möchten es als Dotnet F5-Projekt behalten und eine Klassenbibliotheken mit sehr reduzierter Version der C-Sharp-Verpflichtung erstellen eine Klassenbibliotheken mit sehr reduzierter Version der , sind zwei C-Sharp-Projekte , die daran gewöhnt waren. Weil Sie sehen können, dass dieses Projekt nur die CSV-Datei und den einen Klassifizierer sagt , sieht es fast wie eine Konsolenanwendung aus und die Aussteller kennen program.cs. Und wenn Sie überhaupt in die eigentliche Projektdatei schauen, werden Sie sehen, dass alle Tränen nur das Ziel-Framework sind. Wenn Sie zu Ihrer Konsole zurückkehren, Anwendungen von C-Sharp, Sie feststellen, dass sie auch über eine ausführbare Anweisung verfügen , um sie wissen zu lassen, dass es sich um eine ausführbare Datei handelt. Was wir hier tun müssen, ist die erste Klasse zu löschen, ist ein paar Klassen zu definieren. Wir erstellen also Entitäten, die ich wirklich einfach fragen könnte, die in Datenbanktabellen konvertiert werden . Also was auch immer, und wir haben uns bereits OOP angeschaut, was auch immer unsere Eigenschaften der Daten sind, die wir speichern möchten. Wir erstellen unsere Klasse, um das darzustellen Später werden wir über die API tatsächlich in eine Tabelle umgewandelt, dass Entity Framework es uns vorerst ermöglicht, dass wir nur verstehen wollten, wie wir die Domain-Modell. Also wird unser erstes Modell, seit wir mit den Autos angefangen haben, vier Karten sein. Also wollen wir einen Tisch , um die Autos zu lagern. Welche Eigenschaften haben die Autos, die wir lagern müssen? Nun, im Allgemeinen kann sich das je nach Geschäftsanforderungen und den verschiedenen Szenarien unterscheiden . Also werde ich es einfach von meinem Szenario abstützen. Sie können ein bisschen mehr tun oder finanzieren , dass es etwas weniger tun muss als ich. Aber solange Sie den allgemeinen Umfang dessen verstehen , was wir erreichen wollen, ist das kein Problem. Was wir tun müssen, ist unsere erste Lektion zu erstellen , indem Sie mit der rechten Maustaste auf das Datenprojekt klicken, ich füge eine Klasse hinzu und nenne es Autosymbol. Innerhalb des Autos. Wir werden diese Klasse öffentlich machen. Und dann verteidigen wir die Immobilien. Die erste Eigenschaft einer Datenbanktabelle. Wenn Sie noch keine Datenbanken erstellt haben, machen sich keine Sorgen darüber, dass ich so freundlich wie möglich bin. Wenn Sie mit Datenbanken vertraut sind, wissen Sie, dass der immer mit einem Primärschlüssel beginnt , der automatisch inkrementiert. Wenn Sie mit der Verwendung von SQL Server oder so weiter vertraut sind. Sie wissen, dass Sie ein paar Schritte durchlaufen müssen, Sie müssen sitzen und Identitätsbeschränkung, Sie müssen es auch die meisten Inkremente IN1 und so weiter wissen lassen . Mit Entity Framework oder beim Entwerfen einer Entität, von der wir wissen, dass wir Entity Framework verwenden werden . Alles, was Sie wirklich tun müssen, ist es ID zu nennen. das einfach anders machen , wo wir wissen werden, dass dies der Primärschlüssel ist und automatisch inkrementiert werden sollte. Das war's. Haben Sie also immer den Primärschlüssel für alle, die meisten, wenn nicht alle Entitäten, 90% Ihrer Entitäten sollten immer einen Primärschlüsselwert namens ID haben. Wenn Sie es nicht ID nennen möchten, müssen Sie möglicherweise noch andere Dinge tun. Verwenden von Entity Framework, um es als Primärschlüssel zu erkennen. Zwischen dem Aufrufen der ID oder der Fahrzeug-ID oder der Tabellennamen-ID garantieren diese beiden jedoch, dass Entity Framework Core es als Primärschlüssel angesehen hat. Wir haben einen Ausweis, was brauchen wir? Ich werde sagen, öffentlich im Jahr, vielleicht ist das Jahr des Fahrzeugs auch wichtig. Ich werde das Jahr einlagern. Und das nächste , was ich aufbewahren werde , ist der Name der Saite , der Name des Fahrzeugs, Toyota Yaris usw. Ich werde es einfach halten und das wirft immer einen Ball. Das Auto hätte unsere erste Entität geschaffen. Jetzt wird das nächste, was wir brauchen, damit Entity Framework erkennt, dass diese Klasse eine Tabelle sein sollte, DB-Kontext genannt. DB kurz für den Datenbankkontext, was bedeutet, dass ich mir alle Ressourcen in der Datenbank anschaue alle Ressourcen in der Datenbank und sie als solche erkenne. Wir werden den DB-Kontext einrichten. Wir werden noch keine Datenbank verbinden oder erstellen. Wir richten nur die Grundlagen ein, oder? Nein. Ich klicke noch einmal mit der rechten Maustaste und füge eine weitere Datei, neues Element oder eine Klasse hinzu. Und ich nenne das eine Autobuchung. Db-Kontext, Niacin, einfacher Name zu merken. Carb sucht nach DVI-Kontexten, nur eine weitere Klassendatei. Jetzt wird der DB-Kontext wieder öffentlich sein. Und es wird von einer Basisklasse erben , die uns von Entity Framework namens DB-Kontext gegeben wird. Indem Sie einfach den DB-Kontext eingeben. Und wenn Sie Visual Studio ein paar Sekunden geben, werden Sie bemerken, okay, Wunder und Fehlerbuch-Tool, um die DVI-Kontexte zu verwenden, müssen Sie ein Paket namens NTD Framework installieren. Sie haben also Entity Framework und Anti-anderes Arbeitsgericht. Wir verwenden Dotnet Core, daher müssen wir Entity Framework Core verwenden, das das neueste und beste Entity Framework ist. Jetzt ist das Coole, dass wir einen Paketmanager verwenden müssen. Anstatt also losgehen und Dinge manuell finden zu müssen , kommt Visual Studio mit einem Paketmanager namens New get. Wir haben zwei Möglichkeiten. Wir können es erlauben, einfach weiterzumachen und es für uns zu finden und zu installieren. Oder wir könnten manuell gehen, mit der rechten Maustaste klicken und auf NuGet-Pakete verwalten klicken. Es ist also gut, alle Ihre Optionen zu verstehen, denn der Entwickler, der weiß, dass es Entity Framework benötigt , würde wahrscheinlich einfach hier anfangen. Du würdest wahrscheinlich einfach zu NuGet gehen, zu Bros gehen. Und dann sah er alle ihm zur Verfügung stehenden Pakete. Und dann würde er tatsächlich sehen, dass Sie Microsoft Dot Entity Framework Core Dot SQL Server haben . Und es gibt den, der beworben wurde, um zu sagen, dass ich eine Reihe anderer habe, aber wir werden uns keine Sorgen um diejenigen machen, die Sie nicht brauchen. Tatsächlich werden wir SQL Server-Datenbanken in einem anderen Arbeitskern verwenden , der tatsächlich Open Source ist und für die meisten Datenbank-Engines verfügbar ist. In MySQL, Postgres SQL Fortsetzung Licht, all dies sind verschiedene Datenbank-Engines oder Anbieter. In das Framework bietet APIs, mit denen Sie C-Sharp verwenden können, um mit einmaligen Türen zu sprechen. Wenn wir jedoch, da wir SQL Server verwenden, können wir einfach den SQL Server in einem anderen Work Core Dot installieren , der uns die SQL-Server-APIs sowie die Basisbibliothek gibt für Entity Framework Core Also benutze ich einfach den NuGet-Paketmanager. Und alles was ich tun muss, ist diesen Pfeil nach unten zu treffen. Wir können eine Version wählen. Wir sehen, dass dies die neueste stabile Version ist. muss nicht geändert werden. Klicken Sie auf Installieren, geben Sie ein paar Sekunden. Möglicherweise erhalten Sie aussprechbare Lizenzen und Vereinbarungen. Und da diese komorbide sind, klicken Sie einfach auf OK und akzeptieren und geben Sie die Zeit an, in der es installiert ist. Und wenn wir zum CS-Projekt zurückkehren, wird eine Artikelgruppe hinzugefügt, in der die Paketreferenzen eingefügt werden. Das ist in Ordnung. Wir können lassen, dass wir es im Hintergrund machen lassen. Aber jetzt, wenn wir zwei dB-Kontexte und Kontrolle durchgehen, sehen wir, dass wir die Möglichkeit haben , den Namespace einfach hinzuzufügen. Das war unser erster Vorgeschmack darauf, wie wir den NuGet-Paketmanager verwenden können , um Bibliotheken hinzuzufügen , die von Natur aus fehlen. Fahren Sie mit der using-Anweisung fort. Jetzt haben wir den DB-Kontext. Damit wir den DB-Kontext wissen lassen , was die Tabellen sein müssen. Wir müssen öffentliche DB Sit hinzufügen. Dann sagen wir, dass es ein Entity Framework von Db, Db Cities Sprechen Sie für einen Tisch. Kontext repräsentiert Datenbank, BB-Sets repräsentiert eine Tabelle. Wir müssen das Modell bereitstellen , auf dem diese Tabellen basieren sollten. Nun, wir haben unser Modell in Form von Auto geschaffen. Jemand, der Datenbank sagt. Sie werden einen Tisch im modellierten Auto haben. Und du solltest es Autos nennen, wenn es in der eigentlichen Datenbank erstellt wurde. Also schauen wir uns das einfach noch einmal an. Diese gesamte Klasse repräsentiert unsere Datenbank bei allen Assets, die zur Anzeige der Tabellen, gespeicherten Prozeduren usw. vorhanden sein werden . Sobald wir eine Tabelle hinzufügen möchten, möchten wir die Hälfte erstellen Modell, dem die Tabelle folgen soll. Im Falle eines Autos gaben wir ihm die Eigenschaften, die wir wissen, wie man die Klasse macht, mit nein. Dies zeigt wirklich nur, wie unsere Klasse in Bezug auf die Datenbankentwicklung wie eine Tabelle aussieht . Wir haben gerade eine Klasse mit allen Eigenschaften erstellt, alle Felder, von denen wir kennen , oder Tabelle müssen die Datentypen haben. Und dann teilen wir dem Datenbankkontext mit, dass ich eine neue Tabelle oder einen DV-Satz vom Typ Auto brauche . Und ich wollte Autos anrufen. Wenn wir zurückkommen, werden wir auf meine Aggression einzurichten , wo wir ihm tatsächlich einen erzählen, Code generieren, der die Datenbank erstellt, und wir werden beurteilen, wie das aussieht und wir werden tatsächlich in die Tat generieren Datenbank und sehen Sie, dass all dies so funktionieren wird , wie wir darüber sprechen. Nein. 7. Datenbank in Projekt hinzufügen: Willkommen zurück Leute. Jetzt werden wir also sitzen oder eine tatsächliche Datenbank haben. Wir haben bereits unseren Kontext eingerichtet, der im Grunde eine Verbindung zur Datenbank darstellt. Wir haben bereits mindestens eine Entität oder eine Tabelle für diese Datenbank erstellt . Nein, wir müssen es einmal auftauchen, was wir eine Verbindungszeichenfolge nennen. Und dann, um eine Migration zu erstellen, was wir als Migration bezeichnen , die Entity Framework verwenden könnte, um darüber zu informieren , wie es bei der Erstellung der Tabelle und der Datenbank und aller andere Vermögenswerte , die entsprechend erstellt werden müssen. Gehen wir von unserer Fahrzeugbuchung zu unseren App-Einstellungen. Und was wir hier tun müssen, ist unsere Verbindungszeichenfolge hinzuzufügen. Jetzt sieht die Syntax für einen Kliniker-Stream ungefähr so aus, und ich habe sie gerade über der Protokollierung hinzugefügt. Denken Sie also daran, dass dies alles ein großes JSON-Objekt ist. Ich füge einen neuen Schlüssel hinzu, der Verbindungszeichenfolgen genannt wird. Und dann hat dieser Schlüssel einen Objektwert, der ein anderes Schlüsselwert-Paar, eine Standardverbindung, annimmt , und dann ist dies der Wert. Lassen Sie uns also einfach durchgehen , was dieser Wert hat. Dieser Wert hat einen Server und der Name des Servers ist ziemlich der Computername oder der Name der Datenbankinstanz. Wenn Sie mit Datenbanken nicht so vertraut sind, ist das in Ordnung. Wir haben einen integrierten Datenbankanbieter mit Visual Studio namens Local DB, MS Sql lokale DB. Sie können jederzeit zu diesen Datenbanken gelangen, indem Sie zum SQL Server Object Explorer gehen . Wenn du es nicht wie ich auf der Seite haben willst, können sie immer zu View gehen. Und dann können Sie nach SQL Server Object Explorer suchen. So haben Sie sofortigen Zugriff auf diese Datenbankinstanz und Sie können einfach herunterfallen und es ist lokaler DB-Brägstrich MS SQL lokale DB auf dem B2C, all diese Datenbanken sind gleich dem lokalen Debian, schreiben Sie es genau wie du es siehst. Öffnen Sie Klammern, lokale DB, schließen Sie Klammern. Der doppelte Schrägstrich liegt daran, dass wir dem Schrägstrich entkommen müssen. Wenn wir eine Sitzung haben, erhalten Sie diesen Fehler. Wir müssen diesen doppelten Schrägstrich im Kontext dieser Datei und der lokalen MS SQL DB haben. Dann haben wir ein Semikolon und dann geben wir die Datenbank gleich der Autobuchung auf der Punkte-DB ist. Jetzt haben wir diese Datenbank noch nicht erstellt, aber wir wissen, wie die Datenbank aufgerufen werden soll, also lassen wir sie an diesem Punkt wissen. Später werden Sie sehen, dass die vertrauenswürdige Verbindung gleich der True ist und mehrere aktive Ergebnismengen gleich true sind. Dies sind also sicherheitsbezogene Unternehmen für die Benutzerfreundlichkeit. Sie können also einfach weitermachen und all das replizieren. Nachdem wir unsere Verbindungszeichenfolge eingeblendet haben, müssen wir die Anwendung oder dass Sie beim Start diese Verbindungszeichenfolge für die Datenbank verwenden müssen. Immer noch in unserer Web-App werden wir zum Startup jumbo . Dann werden wir in den Configure Services unseren DB-Kontext-Thread registrieren. Also sagte ich Dienste , die DB-Kontext hinzufügen. Und dann gebe ich den Namen der DVI-Kontexte ein. Und während ich das mache, schaue ich rüber und sehe, dass ich hier einen Namen und einen anderen Namen auf dieser Seite habe. Eigentlich wollte ich das heißen. Ich habe es fälschlicherweise Autobuch Up DB Kontext genannt. Ich wollte es aktualisieren, oder? Kein Carb sucht nach dem DB-Kontext des Dateinamens und aktualisiert dann den Klassennamen entsprechend. In Ordnung, jetzt wo dieser Refaktor fertig ist, fühle ich mich ein bisschen besser und ich kann hierher zurückkehren. Dienste punkten also IDB, Kontext und die Art und Weise, wie ich Klammern mit dem Namen des DB-Kontextes eingegeben habe , und dann haben wir die Optionen. Offensichtlich ist dies nicht wirklich registriert, was wir versuchen, daher die roten Linien. Was ich also mache, ist Kontrollpunkt. Dann wird darauf hingewiesen , dass ich einen Verweis auf mein Autobuchungsdatenprojekt hinzufügen muss . Okay, also haben wir es in zwei verschiedenen Projekten, um Differential Assemblys aufzurufen. Und gerade jetzt sieht das Visual Studio oder die Lösung. Okay, ich versuche etwas zu referenzieren , das nicht im aktuellen Projekt enthalten ist, was ich in einem anderen Projekt sehe. Möchten Sie die Referenz hinzufügen, die ich sagte ja, bitte fahren Sie fort und fügen Sie die Referenz hinzu. Sobald ich das mache, werden Sie sehen, dass diese Null in diese Farbe ändert, die angibt , dass sie weiß, um angibt , dass sie weiß welche Datei es sich handelt und was alles ist. Okay, aber dann habe ich noch einen anderen Fehler, den ich einfach kontrollieren werde. Und es sagt mir, dass ich eine using-Anweisung für Entity Framework Core hinzufügen muss , damit ich das tun kann. Nein, ich habe keine Fehler mehr. Das ist Loch. Wir fügen diesen Code mit den Optionen zur Verwendung von SQL Server hinzu, wie gesagt, Entity Framework, Core kann mehrere Datenbank-Engines unterstützen. Wir geben also an, dass wir hier SQL Server verwenden. Und dann schaue ich in der Konfiguration nach. Denken Sie daran, dass all dies früher injiziert wurde, erhält der Konfigurationspunkt eine Verbindungszeichenfolge. Das ist also eine integrierte Funktion der Konfiguration. Sie haben nach der Standardverbindung gesucht. Also diese Standardverbindung, und dann bekommt er diesen Wert. Also alles, was du so genannt hast, wenn du es nicht als Standardverbindung zu mir bezeichnen wolltest, ich wollte die Carbocation Up Verbindung aufrufen, wie auch immer du es nennst, wir müssen das nur bekommen Verbindungszeichenfolge hier. Lassen Sie uns nun eine schnelle Rechnung machen, nur um sicherzustellen, dass wir nichts gebrochen haben , was wir bauen müssen, erfolgreich war. Lass uns weitermachen. Also im nächsten Schritt muss ich diese Datenbank tatsächlich generieren. Wie gesagt, wir müssen eine Migration durchführen und dann können wir die Datenbank nach der Migration tatsächlich generieren. Was ich im Datenprojekt noch einmal mache, gehe ich zu NuGet-Pakete verwalten. Dann suchen wir nach dem Paket Entity Framework Core-Punkt-Tools. Wenn Sie es hier nicht aufgeführt sehen , so wie es für mich ist, können Sie immer danach suchen. Ich sehe es hier. Ich werde es einfach wie gewohnt installieren. Akzeptieren Sie alle Allgemeinen Geschäftsbedingungen und wissen Sie , dass sie installiert sind. Lassen Sie mich Ihnen nur einen kurzen Hintergrund darüber geben, was Ihnen diese Tools ermöglichen. Wenn Sie sich die Beschreibung der Bibliothek ansehen, heißt es, dass sie den USA ermöglicht, häufig verwendete Befehle zu verwenden. Sie haben Migration hinzugefügt, genau das werden wir tun. Sie haben die Datenbank gelöscht, DVI-Kontexte, migrationsbezogene Dinge, gerüstbezogene Dinge sowie Skript-Migration und Generierung nicht verwandter Befehle erhalten gerüstbezogene Dinge sowie . Dies sind also alle Befehle und dies sind tatsächlich Powershell-Befehle, die wir mit unserer Package Manager-Konsole ausführen werden. Diese Package Manager-Konsole, wenn Sie sie nicht dort sehen, wo ich sie in meiner Taskleiste habe, können Sie immer wieder zu Tools gehen und dann erhalten Sie Paket-Manager und eine Package Manager-Konsole. Okay, sobald du das getan hast, bekommst du ein ähnliches Fenster, in dem du nach dem Befehl gefragt wirst. Was wir tun müssen, ist, unser Standardprojekt oder ein Datenprojekt zu ändern , da sich hier unser DB-Kontext befindet. Dort wollen wir unsere Migrationen und alles steht im Zusammenhang mit Live. Ich habe den Standardwert geändert und ein Datenprojekt vorhergesagt. Und dann sage ich Add Dash Migration und er kann sogar Tabulatortaste drücken, um sie für Sie abzuschließen. Dann nenne ich das erste Migration. Danach drücke ich einfach die Eingabetaste. Es wird das Projekt neu aufbauen und dann erhalte ich diesen Fehler. Keine Probleme. Es heißt also, dass mein Startprojekt nicht auf diese Bibliothek verweist, das ist in Ordnung. Dieses Paket ist erforderlich, damit in die Framework Core-Tools funktionieren können. Also sagen sie uns tatsächlich, was los ist. Kein Problem. Also tritt Miss Biomasse falsch auseinander. Lasst es uns reparieren. Klicken wir mit der rechten Maustaste auf unser Webprojekt. Benutze NuGet. Und ich versuche dir nur zu zeigen, wie einfach es ist, diese Hebel zu bekommen, sobald sie vermisst werden, du bekommst höchstwahrscheinlich sie. Also geh weiter, geh zu NuGet und dann füge ich einfach den Namen der Bibliothek ein, in der es heißt. Wieder einmal können Sie immer einfach in der Suchleiste und die Suchleiste eingeben. Und sobald ich es bekommen habe, kann ich es einfach installieren. Wenn das erledigt ist. Ich gehe jetzt zurück zu meiner Package Manager-Konsole und drücke einfach nach oben. Wenn Sie also den Pfeil nach oben drücken, werden Sie den zuletzt versuchten, zumindest versuchten Befehl gekauft . Also drücke ich einfach nach oben, kaufe diese Migration, drücke erneut die Eingabetaste und bekomme nirgends einen weiteren Fehler. Ich werde diese Verhaftungen nicht für mich verbergen weil man manchmal einige der Schritte vergisst und es gut ist , die Fehler zu sehen und zu wissen, wie man sie durcharbeitet. Ich vergesse hier eindeutig einige Schritte, aber das ist kein Problem als Fehlerumfang, wir werden sie beheben. Dieser sagt also , dass ein Pfeil auf die Hosting-Dienste zugegriffen hat. Und es muss einen Konstruktor geben, der die übergebene Konfiguration übernimmt . Lassen Sie mich also genau erklären , was das sagt. Bach, wenn wir in unserer Startup-Klasse eingerichtet hätten , dass jeder den DB-Kontext verwenden sollte. Und ich würde diese Konfigurationen weitergeben . Die Optionen, so ziemlich dieses ganze Objekt, das hier Optionen genannt wird, würden es uns ermöglichen, eine Reihe verschiedener Einstellungen einzustellen , für die wir uns entscheiden möchten und die Datenbank interagiert halten mit, wenn die Anwendung Ihre Entität startet. Es ist sehr einfach, oder? Nein, die einzige Möglichkeit ist, dass es die Mischung auf String verwenden sollte. Dies reicht jedoch nicht aus, denn während wir tendenziell diese Datenbank verwenden und Verbindungen trennen, sind Sie diese DB-Kontexte und linear repräsentieren die Datenbank, die unsere Trennung und Zeichenfolge ist. Wir müssen unseren DVI-Kontexten erlauben, dass es ein relatives Werkzeug sein soll, unabhängig von den Optionen, die wir weitergeben. Gehen wir zurück zu unserem DB-Kontext und wir werden einen Konstruktor erstellen. Also lese ich einfach CT ODER und drücke Tab, Tab. Und was wir hier weitergeben müssen, wären DB-Kontextoptionen. Und die DB-Kontextoptionen wären relatives Werkzeug oder das Auto, das den DB-Kontext hochfährt. Und ich nenne es einfach Optionen. Und dann müssen wir den Bass notieren lassen, dass er die gleiche Optionsbasis verwenden sollte , die natürlich repräsentiert oder DB-Kontexte aus der Vererbung. Dies vervollständigt die gesamte Abhängigkeitsinjektionshierarchie , auf die ich angesprochen hätte. Wo, wenn die Anwendung wieder gestartet wird, sehen wir, dass wir den DB-Kontext verwenden, der sich in dieser Datei befindet, und geben Sie ihr diese Optionen, um sie zu regieren, ohne das, was wir gerade mit all diesen gemacht haben Codezeile. Der DB-Kontext saß nur dort im La-la-Land und ließ Sie wissen dies der Tatsache bewusst ist , dass Optionen weitergegeben werden. Und auch mit den DB-Kontexten möglich, was die Basisklasse ist, die uns EF Core gegeben hat. Jetzt, da wir das getan haben, versuchen wir noch einmal, die Migration zu betrügen. Und endlich haben wir einen erfolgreichen Migrationsversuch. In Ordnung. Jetzt haben wir diese erste Migration. Schließlich würden Sie einen neuen Ordner namens Migrationen erhalten , den Sie reduzieren können. Aber jedes Mal, wenn wir eine Migration durchführen oder jedes Mal, wenn wir eine Änderung an der Datenbank vornehmen, eine neue Tabelle oder Spalte hinzufügen oder etwas ändern, müssen wir eine Migration durchführen. Die Migrationsdatei wird generiert und sagt, dass dies die Änderungen sind , sind das sind die Dinge, die ich tun werde. Und dann können wir sie ausführen und es wird eine Geschichte behalten. Es ist also eine gute Möglichkeit, einen Verlauf aller Änderungen, die an der Datenbank vorgenommen werden, zu behalten . Wenn wir irgendwann eine Änderung vornehmen und das nicht ganz das ist, was wir wollten, um die Migration zu entfernen, dann können Sie buchstäblich den Befehl ausführen entfernt Migration, was einfach am meisten rückgängig machen würde jüngste Migration. Nur ein kurzer Scan bis zu dem, was diese Migrationsdatei sagt. Es heißt, nun, wir haben eine Klasse namens Migration Builder, die eher initialisiert oder positioniert wird. Und dann erlaubt uns dieser Builder, den Tabellennamen ist Autos zu erstellen. Denken Sie also daran, dass jeder Name, den Sie hier der Name der Tabelle ist, die eingeht. Es heißt also, erstellen Sie eine Tabelle mit dem Namen cars und die Spalten sollten ID sein. Denken Sie daran, dass ich gesagt habe, sobald Sie es anrufen weiß ID automatisch, dass ihre Identität, ihr Primärschlüssel. Es setzt bereits alle diese Einschränkungen in der ID-Spalte auf, vier Zeilen. Und es wird das Jahr und die Namensspalten für uns erstellen. Das ist in der Funktion. Dann haben Sie eine Don't Funktion, die im Grunde besagt, dass ich das tun werde, um dies rückgängig zu machen. Wenn wir also jemals ACI stattdessen die Datenbank erstellen und dann die Unterstreichungen erkennen, oh schnappen, das ist nicht wirklich das, was ich nach mir wollte. Ich muss das schnell ändern. Und Sie möchten die Migration sowie die Änderung der Datenbank rückgängig machen . Denn was passiert ist, dass, wenn die Änderungen, die derzeit bereits auf die Datenbank angewendet wurden, diese Datei nicht vorhanden ist , keine Datenbank vorhanden ist. Dies ist nur eine Anweisungsdatei, um zu sehen , wann die Datenbank das ist, was ich tun werde. Wenn Sie bereits über die Migration verfügen und sie bereits auf die Datenbank angewendet haben, müssen Sie die Migration rückgängig machen , bevor Sie sie aus dem Verlauf entfernen können. Diese Methode nicht enthält Anweisungen und sagen, nun, dies sind die Änderungen, die vorgenommen wurden. Nun, das ist alles, was ich sie rückgängig machen werde. Dieser sagt also, erstelle einen Tisch mit all diesen Dingen. Das Rückgängigmachen dafür wäre, den Tisch fallen zu lassen. Während wir weitermachen, werden wir mehr davon sehen. Also mach dir keine Sorgen darüber. Ich weiß, wir wollten nur sicherstellen, dass wir bereits ausgeschieden werden müssen. Der nächste Befehl , den wir ausführen werden, ist die Update-Datenbank. Sie können weitermachen und das ausführen. Und sobald das erfolgreich war, können wir überprüfen, ob unsere Datenbank erstellt wurde. Gehen Sie also zurück zu Ihrem SQL Server Object Explorer. Dann expandieren, in Datenbanken gehen und dann sehen Sie, wie das Auto BB hochfährt. In dieser Datenbank sehen Sie Autos für eine Tabelle und den EF-Migrationsverlauf als Tabelle. Diese Tabelle steuert also alle Migrationen, die auf die Datenbank angewendet wurden. Und dann werden wir sehen, wie sich diese Datenbank ausfüllt , während wir immer mehr Tabellen hineinlegen. 8. Scaffolding: In Ordnung, jetzt, da wir unsere Migration durchgeführt haben, haben wir unsere Datenbank erstellt. Der nächste logische Schritt wäre, die Anwendung zu laden, um mit der Datenbank zu interagieren. Weil Sie Ihre Benutzer nicht unbedingt in Ihre Datenbank schicken möchten Ihre Benutzer nicht unbedingt in Ihre Datenbank um die Autos verwalten zu können. Nicht jeder wird SQL kennen, nicht jeder wird verstehen, wie man in dieser Umgebung arbeitet Aus diesem Grund haben wir Benutzeroberflächen, unsere Webanwendungen, die es uns ermöglichen, verschiedene operationen auf benutzerfreundlichere Weise. Okay, was wir also tun werden, ist, den ganzen Grund zu untersuchen, warum Seiten es für uns sehr, sehr nahtlos machen , Benutzeroberflächen für die Interaktion mit unserer Datenbank zu generieren. Wir haben schon angefangen alte Seiten für die Autos zu bauen. Und was passieren würde, ist, dass wir die Indexseite haben und der Index normalerweise die Liste der Autos ist. Und dann hättest du das andere, was du Crowd-Seiten nennen kannst. Also C und corrode repräsentiert create, lesen unsere repräsentiert. Sie wurden aktualisiert, und D steht für Lösch-Rohöl. Im Grunde genommen jede Anwendung , die Sie jemals Ihrer mobilen App in Ihrem Kühlschrank verwenden werden, was auch immer es ist, alles, was sie tun, ist grobe Operationen. Sie schauen sich etwas an. Entfernen Sie es, wenn Sie es nicht möchten, ändern Sie es, wenn Sie es nicht mögen oder etwas anderes erstellen. So korrodieren, das ist der Kern jeder Anwendung. Was wir also tun werden , ist die Crowd-Seiten für unsere Autos zu erstellen . Da wir in der Lage sein müssen, eine Flotte zu verwalten, möchten Sie alle Autos in Daten einsehen BSO auf , um diejenigen zu löschen, die nicht mehr hier sind. Vielleicht hat jemand einen typografischen Fehler gemacht, Sie möchten ihn aktualisieren usw. Ich werde eigentlich nur diese erste Indexseite entfernen , die wir für Autos erstellt haben. Was wir tun werden, ist eine abgefasste und neue Indexseite, die Entity Framework verwendet. Was wir also tun können, ist mit der rechten Maustaste zu klicken oder den Ordner „Autos“ , um eine Razor-Seite hinzuzufügen. Wenn dieses Dialogfeld erscheint, haben wir drei Möglichkeiten. Wir haben die Leerer, einen pH-Wert, den wir uns bereits angesehen haben. Wir haben den Grund, warum pgs das Entity Framework ist, also verwenden wir dieses. In diesem nächsten Dialogfeld können wir sagen , wie der Name des PGY1 ist. Wir ersetzen die Indexbits. Ich kann es einfach sagen Index, dann würde die Vorlage fragen: Okay, Willst du es als Listenvorlage, Vorlage bearbeiten. So können wir tatsächlich eine Formenbelastung oder das gesamte Display für alles, was wir wollen, gerüsten . In diesem Fall möchten wir die Liste, da die Indexseite im Allgemeinen die Liste mit dem Datentyp oder den Daten enthält, die Sie anzeigen. Je mehr Modellklasse wäre die nächste. Und die modale Klasse bedeutet, dass ein geführtes Modell oder Tabellenmodell ich beim Generieren dieser Seite verwenden soll ? Also kann ich Auto sagen. Wir werden tun, wir machen es weiter und generieren Code, damit er die verschiedenen Datenpunkte der Auto-Entität anzeigen kann . Das Datenkontext-Plus wären natürlich RDB-Kontexte, in denen alle unsere Datenbankobjekte verlassen werden. Wie auch immer, wir möchten keine dieser anderen Einstellungen ändern müssen und wir können fortfahren und auf Hinzufügen klicken. Ich weiß, dass ich auf diesen Fehler gestoßen bin, den Sie vielleicht nicht haben, aber wir werden diesen Araber durcharbeiten, denn seit den neuesten Versionen von Dotnet Core dieser Fehler während des Gerüstverfahrens aufgetreten und es ist ist gut zu verstehen, wenigstens Loch man kann es umgehen. Es ist manchmal sehr frustrierend, aber lasst uns das einfach durcharbeiten. Es gibt also wenige Dinge , die empfohlen werden. Erstens, du musst und ich werde das alles einfach abbrechen. Eine ist, zu Tools zu gehen und zu NuGet-Paketen, Package Manager, Entschuldigung und dann zu den Einstellungen zu gehen. Und dann klärst du alles, was du Caches bekommst. Also mach weiter und schlag das. Als nächstes geht es darum, die Lösung zu bauen oder zu reinigen. Also werden wir eine saubere Lösung durchführen. Und das brachte dazu, dass es tun muss. Und dann sehe ich, dass ich hier zwei Fehler habe. Ich habe einen Fehler in Bezug auf die Versionen der Pakete. Das verursacht also im Allgemeinen diesen Fehler. Wenn die Pakete die Versionen der Pakete sind , die Sie möglicherweise verwenden stimmen Sie notwendigerweise mit den Versionen überein, nach denen das Gerüst gesucht wird. Ich bin mir nicht sicher warum. Dies ist einer dieser irritierenderen Teile von beiden, was Microsoft, das Microsoft-Team in letzter Zeit getan hat. Aber lasst uns einfach durch die Seele arbeiten. Nein, meine Pakete und ich klicken einfach auf die Projektdatei und ich kann sehen , dass meine Pakete bei 5.09 liegen. Was ich also tun werde, ist sie auf 5.08 fallen zu lassen. Also kann ich in der CSV-Datei einfach die Taschen wechseln. Auf diese Weise können Sie die Bucket-Version ändern , damit Sie sie hier ändern können. Aber wenn Sie sich nicht ganz sicher sind was die Versionsnummern sind, kein Problem. Wir benutzen sie, die du für den nächsten bekommst. Sie können also immer einfach zum neuen Paketmanager für dieses Projekt selbst gehen , sich die installierten Versionen ansehen und dann sehen Sie, welche Versionen Sie haben. Und dann kannst du diese Version ändern. Also lasse ich einfach Version 2.08 fallen und klicke dann auf Aktualisieren. Sie können dies also einfach für die Dotnet-Kern-Vervollständigung und Designpakete für das Entity Framework tun. Nachdem ich diese Operation gemacht habe, sehe ich, dass ich erfolgreich gebaut habe. Also versuche ich das Gerüst noch einmal. Ich klicke mit der rechten Maustaste auf Autos hatte Razor-Seite und dann Seite mit Entity Framework und wir füllen einfach die gleichen Dinge aus , die wir gerade ausgefüllt haben. Indexvorlage ist also Liste, Modellklassen, Auto, und klicken Sie dann auf Hinzufügen. Alles klar, es ist als wäre das ein anderer Bereich. Dieser ist zumindest ein bisschen informativer. Es heißt, dass der ausgewählte Code-Generator verdient wurde , um diese spezielle Tasche zu installieren. Also okay, kein Problem. Lasst uns einfach weitermachen und den Anweisungen folgen . Im Hintergrund. Sie können das sehen und Sie können tatsächlich mit der Installation dieser Tasche beginnen . Ich versuche es einfach noch einmal. Dieses Mal haben wir abgehauen. Ich weiß also nicht, dass das ein ziemlicher Zyklus war, in dem man versucht, eine eindeutige Arbeit zu bekommen. Erneut passiert es, wenn bestimmte Versionen veröffentlicht werden, aber der zugrunde liegende Mechanismus in Visual Studio wurde nicht aktualisiert, um zu wissen, dass dies die Bibliotheksversion ist , sondern verwendet werden sollte. Damit hast du vielleicht ein bisschen hin und her. Und wie gesagt, es gibt nicht viele Ressourcen online, um Sie genau durch das zu führen, was zu tun ist. Diese Schritte werden im Allgemeinen für Sie funktionieren. Aber was wir am Ende haben, ist Indexdatei. Die Codedatei. Im Indexwert sehen Sie, dass viel HTML für uns generiert wurde. Und in der Codedatei werden Sie sehen, dass auch eine Menge C-Sharp für uns erstellt wurde. Lassen Sie uns also kurz besprechen , was hier passiert. In der Indexdatei. Fangen wir mit einer Codedatei an, da diese aufgeführt ist. Schau dir an, was wir uns hier ansehen, ist Injektion. Denken Sie also daran, dass wir früher eine Abhängigkeitsinjektion mit einer Konfigurationsdatei gemacht früher eine Abhängigkeitsinjektion haben, da die Konfiguration etwas hat, das wir wollten. Wir wollten nicht jedes Mal eine ganz neue Instanz der Konfigurationsdatei erstellen , wenn wir etwas wollen. Stattdessen nehmen wir die freigegebene Kopie, die in der App registriert wurde, um für alle freigegeben zu werden. Wenn wir also im Wesentlichen zu unserer Startup-Klasse gegangen wären und RDB-Kontexte registriert wären, haben wir bereits damit begonnen, sie anwendungsübergreifend geteilt zu werden, was es zu einem Kandidaten für Injektion wo immer wir wollen. Dies ist also, dass wir eine Instanz injizieren oder die gescherte Version des Kontextes injizieren und unsere eigene private Kopie in diese Datei initialisieren. Das ist die Abhängigkeitsinjektion von Einzelgespräch. Jedes Mal, wenn Sie eine Abhängigkeitsinjektion durchführen möchten , wird in etwa so aussehen und Sie können mehrere Dinge nach Belieben injizieren. Sie sind also nicht auf jeweils eine Sache beschränkt. Jetzt, da wir im Kontext in unseren Index injiziert haben , erstellen wir hier ein Listenobjekt vom Typ Auto, also ist es nur eine Sammlung von Autos. Alles klar. Wir sollten das Auto wirklich nennen. Also nenne ich das einfach Autos, weil es eine Liste ist. Und ich neige dazu, sehr spezifisch mit meiner Benennung zu werden, zumindest dass ich sie pluralisiere. Wenn es Singular ist, dann ist es einzigartig. Sie können es also umbenennen, um Steuerpunkte zu verwenden und es bis zu allen anderen Referenzen für Sie reflektieren zu lassen . Und was wir dann haben, ist los. Denken Sie also daran, was wir beim Laden der Seite besprochen haben. Wir haben das On, los, komm hier wird gefeuert. Sobald wir zu dieser Indexseite navigieren, wird diese Methode automatisch aufgerufen. Diese Methode richtet alle Daten oder was auch immer wir für die Seite benötigen ein, genau wie wir es mit der Konfiguration getan haben und unsere Variablen im vorherigen Beispiel initialisiert haben. Also hier sage ich, dass meine aktuelle Liste von Autos gleich sein sollte. Und dann erwarten wir die Ergebnisse des Aufrufs der Kontext-Punkt-Cars Tabelle und des Abrufs aller Elemente. Das ist also das klassische Entity Framework. Entity Framework gibt uns über diese Kontextdatei Zugriff auf die Datenbank. Welche Tische wir auch erklärt haben, denn denken Sie daran , Autos, wir stellen Autos dorthin, das gehört uns. Das ist alles was es tut. Es sagt Kontext, gib mir die Autos. Und dann funktioniert Entity Framework , dass wir dies als Ausführungsmethode bezeichnen. Es ist die Liste asynchron zu sehen bedeutet ich tatsächlich alles in der Tabelle als Liste gib. Und dann speichern wir diese Liste in unserer lokalen Variablen oder Immobilie namens Autos. Nachdem all das erledigt ist und die Seite eingerichtet wurde, springen wir zu unserem eigentlichen HTML. Auf der eigentlichen HTML-Seite weiß es, dass es eine Unerfahrenheit ist, gab seinen Namen nicht Index gefunden all diese kleinen Dinge sind, weil wir den pH-Index nennen. Wir kommen zum kostenlosen Create New Button, oder? Also haben wir einen Link zum Create new. Natürlich existiert diese Seite noch nicht, aber das ist in Ordnung. Wir erhalten eine Tabelle und diese Tabelle hat einen Header oder einen Head-Bereich mit den Kopfzeilen. Also haben wir den Tabellenkopf für das kommende Jahr, leisten Sie sich den Namen. Dann haben wir eine weitere Tabellenkopfspalte, die leer ist. Und dann für jeden Gegenstand, der hereinkam, das Modell-Punkt-Auto, Modellautos, das ist unsere Liste der Autos. Und dann verwenden wir das für jede Schleife, um jeden Gegenstand in dieser Liste der Autos zu durchlaufen , die wir sehen. Gib mir ein Display für das Jahr, gib mir eine Anzeige für den Namen. Und in dieser dritten Spalte, die kein Treffer hatte, wer hätte diese Aktionen nennen können, vielleicht was in dieser dritten Spalte ist, geben Sie mir drei Links, die bearbeitet werden wollten , löschen wollen und einen, sehen Sie sich einfach die Details an. Und jeder wird diesen Ausweis übergeben. Denken Sie daran, die Primärschlüssel-ID, Das identifiziert eindeutig eine Spalte in der Datenbank oder dieser Rolle anstelle der Datenbank. Und dann binden wir das nur an die Schaltfläche , damit wir wissen, welche ID wir sehen werden, wenn wir in einer dieser Rollen auf Bearbeiten klicken . Werfen wir einen kurzen Blick darauf , was für uns generiert wurde. Hier ist unser pH-Wert. Dies ist unsere neue Seite. Wir sehen hier, dass wir etwas haben, das wie ein Tisch aussieht. Wenn Sie nicht mit allen Tabellen vertraut sind, schauen Sie in Bootstrap nach , dann werden sie wirklich so aussehen. Aber wir haben die Tabelle, wir haben die Spalte für Sie, wir haben Namen, und dann haben wir die leere Spalte, die die Links haben wird. Was wir nicht haben, sind Daten. Ja, wir haben die Seite, auf der wir die Schaltfläche „Neu erstellen“ haben , oben in der Indexflut , damit wir diese Seite an das anpassen können , was wir wollen. Anstatt den Index oben zu sehen, können wir die Mietliste der Autos sagen. Das hatten wir im Grunde letzte Mal, als wir das tun und sehen, ob es aktualisiert und geändert wird. Okay, was wir also nicht haben, wäre Neues zu schaffen. Wir haben keine Daten und wir haben keine der anderen Seiten. Wenn wir auf Neu erstellen klicken, wird es einfach herumlaufen, da es keine Seite gibt, um eine neue zu erstellen, wir kommen zurück. Was wir tun werden, ist ein GitHub-Repository für dieses Projekt zu erstellen. Und dann können wir unsere Funktionen weiter entwickeln. 9. Projekt zu GitHub hinzufügen: Alles klar Leute, also sind wir zurück und was wir in dieser Lektion machen werden , ist Sitzen oder GitHub Repository für unsere Projekte. Nein, GitHub, wir haben das durchgemacht. Es ist ein sehr, sehr nützliches Tool oder eine Plattform, um eine Kopie unseres Projekts zu behalten und die Geschichte unseres Projekts zu behalten. Es ermöglicht uns auch , sehr einfach mit unseren Kollegen oder Freunden an einem Projekt zusammenzuarbeiten . Museo Studio, Microsoft hat GitHub vor Jahren gekauft und seit der Integration zwischen Microsoft-Tools und GitHub, nämlich Visual Studio und Sie haben Visual Studio Code bereits gesehen. Diese Integrationen sind wirklich gereift und sind sehr, sehr, sehr mächtig geworden. Wir werden also sehen, wie wir alle unsere Projektinformationen mit Visual Studio an GitHub senden und synchron halten können unsere Projektinformationen mit . Es ist also wirklich einfach , das zu erledigen. Was wir tun können, ist einfach in die untere rechte Ecke unseres Visual Studios zu schauen . Und wir werden diese Schaltfläche mit der Aufschrift Zur Quellcodeverwaltung hinzufügen sehen . Also geh weiter und klickst darauf und du wirst sehen, dass du bekommen wirst. Fahren Sie also automatisch auf Ihrem Computer zu installieren , wenn Visual Studio installiert wurde, wenn es nicht bereits installiert war, als Sie diese Übung mit Visual Studio Code durchgeführt haben. Aber nein, sie werden sagen, erstelle ein Git-Repository und sie richten das lokale Repository ein. Und dann können Sie auch das GitHub-Repository sofort erstellen. Wenn Sie also nicht sagen, dass Sie sich nicht angemeldet haben, werden Sie wahrscheinlich dazu aufgefordert, sich an diesem Punkt mit Ihren GitHub-Anmeldeinformationen anzumelden . Aber von hier aus können Sie angeben, dass Sie ein privates Repository wünschen , und das ist vorerst in Ordnung. Sie können es als privat lassen , wenn Sie das Häkchen deaktivieren sei denn, er hat den Großkäufer repariert , nein, aber es würde es nicht auf GitHub erstellen , wenn Sie es nicht privat machen würden, nicht ganz sicher warum, aber Sie können immer zurückgehen und es in die Öffentlichkeit umstellen , wenn Sie dies wünschen. Wir lassen es als privat. Wir müssen keine Beschreibung oder irgendetwas anderes eingeben. Und sie sagen uns, wie der URL-Tweet aussehen wird. So kannst du fortfahren und klicken, Erstellen und schieben und ihm ein paar Augenblicke geben. Und ich bekam keine offenen Hinweise darauf, dass es fertig war. Aber wenn ich in die untere rechte Ecke schaue, sehe ich, dass die Schaltfläche zum Hinzufügen nicht mehr da ist anstelle des Zentimeter-Pfads, es sagt mir, dass ich einen Master-Zweig habe. Es wird das sein, was wir die Fernbedienung nennen. Denken Sie daran, dass wir diese Remote eingerichtet hatten, die im Grunde diesen Link zum Remote-Repository hat. Es hat ausstehende Änderungen und Commit , die möglicherweise in Ressourcen wissen. Sie werden sehen, dass alle Dateien im Solution Explorer Null-Hub, kleine Vorhängeschlösser, diese Schaltflächen-Los darauf hinweisen, dass die Version, die sich auf Ihrem Computer befindet , seit dem letzten Update des -Server. Wenn ich also reingehe und irgendeine Anpassung treffe , werde ich diese Datei nur geringfügig anpassen . Dann wirst du sehen, dass es dieses rote Häkchen loswird. Bedeutet ja, diese Datei wurde geändert und wir haben ein anderes Panel, das als gute Änderungen bezeichnet wird. Wenn es für Sie nicht dort ist, wo es auf meinem Bildschirm ist, können Sie immer zur Ansicht gehen und Sie werden gute Änderungen sehen. In Ordnung, sobald Sie also Änderungen öffnen, werden Ihnen die Dateien angezeigt, die geändert wurden und darauf warten, festgeschrieben zu werden. Sie haben also Ihre Commit-Nachricht, also heißt es eine modifizierte Indexdatei. Dann wäre der einfachste Weg, dies zu tun, alles zu verpflichten und zu sehen, was das tut, ist Push and Pull. Es wird Ihre Änderungen übersenden und alle neuen Änderungen überziehen, die möglicherweise vorhanden sein könnten? Nein. Es gibt Situationen , in denen Sie möglicherweise mit Ihrem Kollegen in Konflikt geraten, was bedeutet, dass Sie diese Indexseite geändert haben. Er oder sie hat auch eine Änderung an dieser Indexseite vorgenommen. Und dann hat einer von euch vor dem anderen eingecheckt. Wenn Sie also Ihre modifizierte Version der alten einchecken , merkt GitHub, dass sich die Version, die es hat , von der Version unterscheidet, die Sie zuletzt gegeben hat. Und dann würde das einen Konflikt auslösen. An diesem Punkt müssen Sie Konfliktmanagement und -lösung durchführen . Wir können das später diskutieren, wenn ein Projekt wächst. Aber reinal dies, halten Sie es einfach genug Um zu wissen, dass wir erstellen oder repository für Änderungen synchronisieren können repository für Änderungen synchronisieren und wenn wir Verpflichtungen eingehen, und Sie werden sehen es es lokal und dann festlegt synchronisieren Sie die lokalen Commits mit einem GitHub Commits, das automatisch alles herunterbringt , was Sie nicht haben und das sich derzeit in GitHub befindet. Echter Eintrag. So einfach ist es, als Gruppe zu programmieren. Jeder von euch könnte sich also leicht bei diesem Projekt auf GitHub anmelden. Ich zeige dir einfach durch Maya-Doppelpunkt. Also hier ist der Carbo-König, der gerade vor einer Minute erstellt wurde . Da ist das Huhn, das ich gerade eine modifizierte Indexdatei erstellt habe. Stimmt's? Niemand ist privat und zwei von ihnen die einzige Person. Wenn ich also gut wollte , halte es privat, aber teile es, dann ist das so einfach wie zu den Einstellungen, gehe in Zugriff verwalten. Sie könnten Sie bitten, zu bestätigen, wer Sie sind. Und nachdem Sie bestätigt haben, wer Sie sind, können Sie Mitarbeiter einladen. Mitarbeiter einzuladen ist so einfach wie das Eingeben des Namens der Person. Also habe ich noch einen, ich versuche mein anderes YouTube zu verteidigen, einen Kegel, damit ich einfach demonstrieren kann, wie das aussieht. Aber man kann eigentlich einfach nach dem Benutzernamen dieser Burst-Kunst suchen. Ich habe mich nur mit zufälligen Benutzernamen befasst. Es kann einfach den Benutzernamen einer anderen Person finden, weitermachen und hinzufügen. Und dann würden sie die Einladung annehmen, und dann könnten sie das Projekt auch in der Reihenfolge schieben und aus dem Projekt ziehen, sagen wir mal die neue Person im Team, oder sogar wenn Sie Ihren Code verloren haben, mal sehen, dein Computer ist abgestürzt. Ich muss ihr lokales Projekt verloren haben und du musst es von GitHub abrufen. Das gleiche Verfahren wie jemand, der gerade dem Projekt hinzugefügt wurde und eine lokale Kopie benötigt, um mit der Arbeit zu beginnen. Alles, was Sie wirklich tun müssen, ist zum Code zu gehen. Und dann siehst du Open mit Visual Studio. Sobald Sie das getan haben, wird Visual Studio auf Ihrem Computer geöffnet. Geben Sie dann an, dass Sie aus dem Repository klonen können. Dies ist also ein Repository-Speicherort , der die URL für GitHub Shore ist. Dies ist Ihre lokale Vergangenheit. Jetzt wird es rot angezeigt, weil ich diesen lokalen Pfad bereits habe . Das ist ein Projekt, an dem wir arbeiten. Nein. Wenn es also noch einmal unsere erste Maschine wäre, hätten Sie dieses Problem nicht . Oder wenn es das erste Mal wäre, dass Sie dieses Projekt bekommen, hätten Sie dieses Problem nicht mit dem Pfad. Selbst wenn Sie das Projekt bereits haben, müssen Sie nur so schnell ändern und es würde in einen anderen Ordner gezogen werden, wenn Sie wirklich eine Kopie wünschen. Nachdem Sie angegeben haben, wo Sie lokal klonen möchten, klicken Sie einfach auf Klonen zwischen Visual Studio und GitHub. Alle Projektdateien, die hochgeladen wurden, werden auf Ihren Computer heruntergeladen und synchronisiert, und dann können Sie mit der Arbeit beginnen. So einfach ist es für Teams, mit der Zusammenarbeit zu beginnen. Wenn Sie das gesamte Projekt öffentlich machen möchten. Serrano ist privat, was bedeutet, dass diese URL und ich versucht haben, Anzug zu wachsen und ich öffne einfach ein neues Inkognito-Fenster. Wenn ich versucht habe, Anzug zu wachsen, komme ich zu einem 404. Es existiert technisch gesehen nicht im Vergleich zu einem meiner öffentlichen Projekte. Lass mich einfach einen finden, von dem ich weiß , dass es öffentlich ist. Wenn Sie diese URL erhalten und durchstöbern würden, würde sie zeigen , dass jeder auf GitHub zu öffentlichen Repositories navigieren kann . Aber sobald es privat ist, kann niemand, wenn Sie an Ihren ernsthaften Vorhersagen der geldverdienenden Projekte arbeiten , Ihr geistiges Eigentum nicht mit scharf teilen, es privat machen wollen . Aber dann in der wahren Bedeutung von Open Source und Zusammenarbeit und Scheren möchten Sie wahrscheinlich ein paar offene Projekte haben , denn das kann dann auch als Portfolio für Ihre Bewerber oder Ihre zukünftigen Arbeitgeber Wenn sie sehen wollten, welche Art von Projekten Sie gemacht haben, und machen Sie sich einfach einen Überblick über Ihre Fähigkeiten. Insgesamt ist GitHub ein wunderbares Tool , um einfach neue Leute kennenzulernen, wissen Sie, was andere Entwickler tun könnten. Man kann Menschen folgen. Leute können dir beim Posten folgen. Leute können Ihre Repositorys starten oder eigene Kopien Ihres Codes erstellen, weil Sie vielleicht etwas tun , an dem jemand anderes interessiert ist und was Sie tun, halb fertig ist, kann hilf ihnen. In der wahren Bedeutung springen wieder einmal in die Open-Source-Community für die Zusammenarbeit. Das bringt GitHub auf den Tisch. Also mach weiter und was wir machen werden , ist Shorts oder einen Kegel zu machen. Jedes Mal, wenn wir eine Funktionalität erhalten, synchronisieren wir uns mit dem Repository, weil es uns wieder die Geschichte von allem gibt. Wenn wir also einen Fehler machen und etwas nicht mehr funktioniert, können wir immer zur vorherigen Version zurückkehren. Was Sie nicht tun möchten , ist, zu viele Änderungen zwischen den Versionen zu hinterlassen zu viele Änderungen zwischen den Versionen zu , die Sie einchecken. 10. Razor hinzufügen: Hey Leute, willkommen zurück. Jetzt haben wir eine Vorstellung davon, wie wir den Code generieren können , um die Autos oder Details in einer Tabelle anzuzeigen. So ziemlich was wir tun können, ist auf dieser Linie fortzufahren und alle Crowd-Aktivitäten auszuspielen. Korrodieren Sie also noch einmal, da wir erstellen, lesen, aktualisieren und löschen. Moment haben wir also eine der roten Optionen in Form des Index, aber wir haben keine Daten in der Datenbank. Wir haben zwei Möglichkeiten. Wir könnten in die Datenbank gehen, in den Datensatz aufnehmen, aber natürlich würden wir unsere Benutzer nicht dazu ermutigen, wenn wir das realisieren oder nicht tun würden. Stattdessen werden wir den Kontinent tun , um mit allen Seiten zu fesseln. Und als nächstes folgt die Create-Seite, die diese in die Datenbank lenkt, ermöglicht es, die Benutzeroberfläche in unsere Daten zu verwenden und sie dann aus dem Index sichtbar zu machen. Auf die gleiche Weise wie wir die Indexdatei generiert haben. Wir werden einfach mit der rechten Maustaste auf Autos klicken, Razor-Seite hinzufügen. Und ich werde eine weitere Ergebnisseite mit Entity Framework erstellen. Nun, wieder einmal, du könntest all diese einfach abreißen, aber ich wollte sie einzeln machen, damit wir die verschiedenen Code-Bits beurteilen und halten können , dass sie alle zusammenkommen , um uns die volle Crud-Funktionalität zu geben. Also Razor-Seite mit Entity Framework, habe ich diese hinzugefügt. Und dieses Mal mache ich ein Create. Ich nenne die Seite create. Die Vorlage bleibt, die erstellt, wird uns ein Formular geben oder eine Modellklasse wird unser Auto sein. Und wir können den Datenkontext Stress verlassen, weitermachen und auf Hinzufügen klicken. Und es erzeugt unsere Handgemenge diese Seite für mich. Also bekomme ich den Pitch-Fonds sowie die Codedatei, an die wir jetzt gewöhnt sind . Denken Sie daran, dass wir diese Aktivität einfach mit dem index. Zwischen den Lektionen waren Sie möglicherweise geneigt, Ihre NuGet-Pakete zu aktualisieren , und das würde wahrscheinlich dazu führen, dass die Verbindung mit einem älteren Handgemenge getrennt wird. Wenn Sie also diesen Fehler erhalten, einfach zur vorherigen Version oder zu einer Version zurück vorherigen Version oder zu einer Version , bevor die Version bei Null unter ist. Und versuche es noch einmal. Und während Sie ziehen und wenn Sie den Bereich weiter erhalten, knicken Sie einfach das Gerüst oder lassen Sie die NuGet-Paketversion fallen und versuchen Sie, sich zu zerreißen. Lassen Sie uns nun beurteilen, was wir durch dieses Handgemenge bekommen haben, die Aktivität für die Create-Seite. Wir haben unseren Code hinter einer Datei, die immer eine Klasse war, vom Page-Modell geerbt wurde. Und dann werden unsere Kontexte eingespritzt. Dann heißt es nur „pH-Wert zurückgeben“. Mit anderen Worten, wir haben nichts, was wir unbedingt für das Create laden müssen , also müssen wir keine Daten einbauen, um das Formular anzuzeigen, weil sie nur ein leeres Formular für den Benutzer, damit er tatsächlich einen Datensatz erstellen kann. Der Beginn ist also leer, es gibt nichts, was man hierher zurückkehren könnte, das ist in Ordnung. Wir haben auch diese Eigenschaft namens Cards. Also haben wir ein öffentliches Auto und es ist ein Objekt des Typs Auto, und dann haben wir Immobilien gekauft. Bankeigentum teilt der Razor-Seite im Grunde genommen mit, dass auf dem Formular, unabhängig davon, welche Eingabe für eine Eigenschaft, die sich der Razor-Seite im Grunde genommen mit, dass auf dem Formular, unabhängig davon, welche Eingabe für innerhalb dieser Klasse befindet, sie beobachten sollte. Sobald es eingereicht wurde, wird es diesen Beitrag erreichen. Alles, was entbeint ist, wird beobachtet, so dass, wenn wir den Beitrag treffen , all diese Daten tatsächlich abkratzen und Daten für die Fahrzeugeigenschaften aus dem Formular übereinstimmen. Und so können wir es darin auf Post bearbeiten. Hier prüfen wir zuerst, ob das Modell gültig ist. Die Gültigkeit des Modells kann eine Reihe von Dingen sein , basierend auf den Daten, nach denen wir verlangen. Im Falle der Herstellung eines Autos wäre es absurd bis zu einem Tiefstand, ein Auto, das ohne ein Jahr und mit dem Namen OTA betreten werden sollte. Oder zumindest ist der Name das Wichtigste. Das Ohr könnte optional sein. Wir möchten also auf jeden Fall sicherstellen , dass zumindest der Name vorhanden ist, bevor wir versuchen, etwas über zwei Daten zu senden. Wenn also der Modellstatus hier gültig ist, prüft das im Grunde genommen, ob wir sehen, was sind die Validierungsregeln? Emittieren sie wenn nicht, laden Sie einfach die Seite neu. Ich zeige es dir in ein paar Sekunden. Halten Sie das wird zu jedem übersetzen und zeigen, was damit nicht stimmt. Wenn es jedoch nicht gültig ist, laden Sie die Seite einfach neu. Andernfalls wird es passieren, dass es den Datenbankkontext geht, zum Autostall geht und das neue Objekt des Autos hinzufügt. Sehen Sie, dass das dieselben Objekte sind, die wir sagten, Ben Eigentum vier. Und danach werden Änderungen gespeichert. Das ist also alles Entity Framework funktioniert. Es steht eins, sagt mir an welchem Tisch und sag mir , was du machen wolltest. In diesem Fall wollten wir also hinzufügen und wir möchten ein Auto hinzufügen. Und dann, sobald wir die Daten erweitern, was bedeutet, dass etwas hinzugefügt, etwas gelöscht, etwas aktualisiert wird. Sobald wir etwas an den Daten geändert haben, müssen wir die Änderungen zum Speichern aufrufen. Jetzt wirst du das Warten bemerken. Wenn ich doppelklicke, warte ich, du wirst sehen, dass es diesen anderen Titel gibt, der als Senke bezeichnet wird. In der asynchronen Programmierung werden Sie also eine Menge dieser asynchronen Aufgabe außerhalb des Typs sehen, zu dem ich tatsächlich resultiere. Beachten Sie, dass der Beginn nur ein Sauerstoffergebnis ist. Dies ist Ergebnisse von Aufgabenaktionen , da es sich um eine asynchrone Funktion handelt. Der Grund, warum es asynchron ist, ist, dass es einen asynchronen Funktionsaufruf für den Kontext macht . Es hat also eine nicht asynchrone Version. Speichern Sie einfach die Änderungen. Aber dann müssten wir ein paar Änderungen an unserer Methode und all diesen Dingen vornehmen. Aber wenn es das für Sie generiert hat, wird es immer versuchen, Ihnen den effizientesten Code zu geben , der auf dem basiert, wozu er fähig ist. Deshalb erhalten wir die asynchronen Versionen dieser Methoden, nachdem sie Änderungen gespeichert haben und alles in Ordnung ist, dann leiten wir zum Seitenindex um wenn sogar der generierte Code weiß, dass sollte nach einer Seite namens Index suchen. Diese Indexseite wäre genau hier auf der gleichen Ebene wie create. Nachdem alles erledigt ist, wird es einfach zur Liste weitergeleitet und Sie sehen Ihren neu erstellten Datensatz in dieser Liste. Werfen wir einen kurzen Blick auf die HTML-Datei, die für uns generiert wurde. Es ist nicht viel, es ist ein kleines Formular, weil die Tabelle nicht so viele Datensätze enthält , um zu bedauern , dass viele Felder ausgefüllt werden müssen . Was wir kriegen, wir kriegen eins, wir kriegen das Auto. Wenn wir eigentlich einfach neu gestaltet könnten , erstellen Sie ein Auto. Das ist unser H1-Tag, entferne die H vier. Und dann haben wir ein paar Bootstrap-Divs. Wir haben ein div mit einer Klasse namens Rule, und dann haben wir eine Klasse namens call MD4. Das bedeutet also, dass es vier Spalten in der Regel aufnimmt. In Bootstrap ist das Rastersystem so, dass Sie eine Regel erstellen können und dann können Sie col, eine Zahl streichen lassen, die Sie bis zu 12 haben. Sie können also so viele Call-Divs anstelle einer Zeile bis zu 12 haben. Du könntest also 12 Einsen oder drei, Viere oder vier Dreier haben. Okay, du kannst so viel mischen und einfach nicht wählen, was zu haben, richtig. Wenn ich also Distrikt direkt über das hinweg bilden wollte , was ich im HTML-Abschnitt dieses Kurses gesehen habe im HTML-Abschnitt , als wir gerade das Formular erstellt haben, haben wir ihm alle Formular-Tags gegeben und so weiter so weit wie möglich gestreckt, dann müssten Sie keinen Col md angeben. Damit kannst du also experimentieren. Schauen Sie sich die Dokumentation für die verschiedenen Spaltenmessungen an, und wir können damit experimentieren und sehen, wie das aussieht. Aber am wichtigsten ist unsere Form. Dann haben wir in der Form dieses div, das sagt, dass AASB Dash-Validierungszusammenfassung nur für das Modell angezeigt wird. Es hat auch einen anderen Modus, der alles sieht. Alles klar, manchmal treffe ich einfach das alles. Manchmal liebt man nur Model. Das ist in Ordnung. Ich meine, Sie werden die Vorteile des einen und nicht des anderen sehen, obwohl es globaler ist. Ich würde also nur empfehlen, dass Sie alle verwenden , wenn Sie zwei haben. Dann geben wir ihm eine Klasse mit Tics Gefahr. Dieser Abschnitt der Seite wird tatsächlich mit allen Validierungsfehlern gefüllt , die vorhanden waren, als wir sagten, wenn der Modellstatus nicht gültig ist, geben Sie den pH-Wert zurück , also ist dies automatisch. Der Modellzustand ist also tatsächlich Truck zu sehen, naja, das ist das gesamte Modell und das wird entbeint. Wenn Daten eingegeben und auf Post eingegeben werden, werden alle Daten, die hier über das Formular eingegeben wurden, transportieren . Sie werden sehen, dass Sie zwei Eingänge haben. Eine für mein Auto-Punkt-Jahr. Ich möchte keinen Punktnamen angeben damit wir das Label erhalten, die Eingabe erhalten, und dann erhalten wir das Spun mit der integrierten Validierungsnachricht . An zwei Stellen werden die Validierungsmeldungen unter der Eingabe und oben auf dem pH-Wert in einer Gen-Zusammenfassung angezeigt . Wann immer es Schecks veröffentlicht wird, war er gültig? Wenn nicht, kehren wir zur Seite zurück , wenn diese Seite neu geladen wird. Zwischen der Validierungszusammenfassung und diesen Validierungsspannen werden wir alle Texte sehen, die angeben, warum nicht über etwas abgestimmt wurde. Was ich tun werde, ist das umzudrehen , weil es unsere Farm ist. Es wurde für uns generiert, was wir selbst ändern können. Also bin ich gegangen, um diese Formulargruppe für einen Namen über Jahr zu setzen. Dieses Ding, das mehr fließt. Es nennt den Autonamen und setzt das Jahr. Das ist an dieser Stelle optional. Und dann haben wir den Create Button darunter mit BTN Klasse wird zehn Strich primär sein. Und Sie können diesen Sinn sogar erweitern, es blockiert, es erstreckt sich über die gesamte Seite. Dann haben wir unsere Liste zurück zu Listen-Button. Wenn die Person also so weit gekommen ist und initiiert, Okay, ich will das Auto nicht mehr bauen. Sie können immer einfach zurück zur Liste schlagen zum Index zurückkehren. Unter all dem befindet sich ein Abschnitt für die Skripte. Und was passiert ist, dass dieser gesamte Validierungs-Workflow , den ich gerade beschrieben wirklich eine Kombination aus dem Hinzufügen von Validierungsregeln ist und ich werde Ihnen zeigen, wie das funktioniert. Und einige teilweise oder leider, es sind einige Skripte, die auf der Seite gerendert werden. Dieses Codebit wird teilweise asynchron für Validierungsskripte gerendert. Wenn wir in den freigegebenen Ordner schauen, werden Sie die genauen Validierungsskripte für Teilunterstriche teilweise sehen . Da ist es. Und wenn Sie in diesen Teil schauen, werden Sie sehen, dass alles, was zwei Skript-Tags für jQuery dot validate hat . Also zu jQuery-Bibliotheken, die wir in der Reihenfolge www roots gesehen haben. Ich versuche dir nur zu zeigen, wie hier alles miteinander verbunden ist. Wir haben die jQuery validieren, wie die jQuery aufdringlich validiert. Also haben wir diese, wir haben gerade einen Teil erstellt oder das Framework hat diesen Teil für uns generiert , der automatisch Hinweise darauf hat. Jederzeit wird ein Formular für Sie generiert oder sogar wenn Sie Ihr eigenes Formular erstellen. Später werden wir uns anschauen, wie Sie Ihre eigene Farm von Grund auf oder Ihre eigene Seite erstellen können . Dann können Sie diesen Code einfach verwenden, um diese Art von Validierungs-Workflow für alle Teile zu erhalten wenn wir ihm sagen wollten welche Felder gültig sind oder bedauern, sollten sie validiert werden und gegen welche Regeln wir auf das eigentliche Modell übergehen müssen , das verwendet wird oder auf die tatsächliche Entität. Das Einfügen dieser Attribute sind Datenanmerkungen ist so einfach wie über das Feld zu gehen , auf das die Regel angewendet werden soll. Und dann mit eckigen Klammern und dann werden wir sehen erforderlich. Das ist also unsere erste Regel, die besagt , dass jederzeit Daten für jede Seite eingegeben werden sollen , die dem Auto oder einer Form, die dem Auto nachempfunden ist , modelliert ist. Das Namensfeld ist erforderlich. Das ist Schritt Nummer eins. Welche anderen Regeln könnten wir haben? Wir möchten vielleicht auch sagen, dass die Saitenlänge sein sollte, und dann können wir eine maximale Länge von vielleicht 50 sehen. Kein Fahrzeugname sollte also 50 überschreiten. Lassen Sie mich das auf 150 setzen. Und dann könnten wir sagen, dass wenn es nicht überschritten wird, eine Fehlermeldung meines Namens wünschen. Ist der Name zu lang. Etwas, das wir auch eine Mindestlänge festlegen können, damit die Person nichts mit einem Zeichen eingeben kann , weißt du, solche Sachen. Sie können sie also einfach direkt über dem Feld mitreihen. Nun, indem Sie diese Regeln gegen die Schuldnereinheit stellen, da dies die tatsächliche Einheit ist, die verwendet wird, um die Tabelle zu generieren, wie wir es gesehen haben, als wir ein DB-Satz hinzugefügt haben. Wir haben unsere Migration hinzugefügt. Wenn ich die hierher stelle, werde ich die Datenbank tatsächlich beeinflussen. Wenn ich also an dieser Stelle eine weitere Migration generiere, werde ich einfach eine generieren. Ich habe Validierungsregeln erstellt und Enter drücken. Denken Sie dabei immer daran, das Standardprojekt in das Datenprojekt zu ändern . Aber sobald das erledigt ist, können Sie hier sehen, dass die Waren ein Altarspalten-Bit Syntax sind. Hier heißt es, ändern Sie die Spalte mit dem Namen, dem Namen, denn das ist die, in der wir gerade die obigen Regeln festgelegt haben. Dann ist der Typ immer noch, der Typ ist int varchar 150. Bevor es also in Var-Char-Markierungen war, beachten Sie, dass der Datentyp in der Datenbank zwar als Beschränkung der Zeichenfolge sitzt, aber der Datentyp in der Datenbank geändert wird , um zu wissen, dass er selbst dann nicht mehr als 150 speichern kann. Alles klar? Nein, es ist nicht mehr unhörbar weil wir es jetzt erforderlich gemacht haben. Bevor es also wahr war, war es kein Blau. Wir hätten die MTU aufheben können. Die Datenbank hätte kein Problem. Die Datenbank selbst lehnt sie aktiv ab. Wenn es null ist, wenn nichts angegeben wird, erhalten Sie, wenn nichts angegeben wird, eine leere Zeichenfolge als Standardwert, jedoch nicht null sein kann. Auf der Clientseite würde es jedoch nicht einmal die leere Zeichenfolge akzeptieren , da sie erforderlich ist. Wenn wir also auf der Indexseite testen oder formen, klicke ich auf Neu erstellen und dann haben wir unsere Formulare. Aufgrund des Anrufs MD4 sehen Sie, dass es sich nur auf bis zu vier erstreckt. Was wir tun können, erforsche das einfach. Ich werde nur Elemente untersuchen , die wir mit dieser Breite herumspielen können. Wenn ich das zum Beispiel MDA Acht nennen würde, würdest du dich auf acht Mal dehnen. Also von wo sehen wir die EHR? Linien, die sich von links nach rechts erstrecken, die so breit sind wie die 12 Spalten. Ich weiß also, dass er acht der 12 aufnehmen wird. Wenn ich keine Breite angegeben hätte , würde es so aussehen. Es wäre irgendwie winzig. Wenn wir also wollten, dass es sich vollständig ausdehnt und dann könnten wir einfach sagen, col md. Also mache ich das einfach hier, gleich Anrufe. Dies ist also eine nette, nahtlose Möglichkeit zu testen wie es aussehen würde bevor Sie die Codeänderung tatsächlich erfüllen. So sieht man nirgends sogenannte Dashboards. Sie können also sagen, Col Dash AMD, T12, also auf einem mittelgroßen Bildschirm, T Corp Punktgröße. Oder wenn Sie nur möchten, dass es auf jedem Bildschirm universell ist und diese Modusgröße annimmt oder nicht Mathspace, können Sie einfach sagen, dass Col Dash T2 als Dash the Nummer bezeichnet wird. Hier sehen wir also, dass es sich letztendlich so weit wie möglich von links nach rechts erstreckt . Und dann haben wir unseren Create-Button , der btn block ist. Wenn ich nur versucht habe, diesen Punkt zu schaffen. Da sind wir los. Wir sehen, wie unsere Validierung funktioniert. So erhalten Sie diese Validierungszusammenfassung nirgends oben und dann erhalten wir die folgenden Validierungsnachrichten. Nein, wir haben dem Jahresfeld nicht mitgeteilt , dass es aufgrund unserer Regeln erforderlich war. Was ich erklären werde, warum du das sehen wirst. Es ist also gut, diese Nuancen mit all dem gültigen Gericht zu verstehen mit all dem gültigen Gericht zu und welche Felder sozusagen automatisch validieren. Weil Jahr eine Ganzzahl und kein nullable int ist. Wenn Sie also int in C-Sharp sehen, bedeutet dies, dass es niemals null sein kann. Alles klar? Nano heißt also leer. Aber dann kann ein int nie leer sein. Ein int wird immer auf 0 gesetzt. Das heißt also, als wir gerade eingereicht haben , noch habe ich versucht, welche einzureichen, wenn es bescheiden ist. Es war nicht gültig, da die ganze Zahl überhaupt keinen Wert erhielt. Es hat nicht einmal die 0 bekommen. Soweit es betrifft, ist es ungültig. Wenn ich also eine 0 dort platziert hätte, verschwindet die Validierungsnachricht. Wenn ich versucht habe zu erstellen, ist es zufrieden, dass 0 kein gültiges Jahr für uns ist. Nullen ein gültiger Wert im Vergleich zu Null für eine Ganzzahl. Ich versuche nur zu erklären, all die verschiedenen Datentypen ihre eigene Art von Validierung basierend auf dem Wartestand haben könnten dass all die verschiedenen Datentypen ihre eigene Art von Validierung basierend auf dem Wartestand haben könnten. Sie arbeiten in C-Sharp. Aber letztendlich, wenn ich nichts hinstelle, wird es automatisch sagen, naja, es ist erforderlich. Wenn ich versucht habe zu erstellen, geht es nicht weiter. Und wenn Sie weitere Beweise wünschen, setze ich unsere Haltepunkte einfach genau an diese Zeile, wo sie überprüft werden, ist es gültig? Wir klicken auf Erstellen, es wird diesen Haltepunkt erreichen. Nun, es wird nicht den Haltepunkt erreichen , da Validierung aktiv beobachtet. Lassen Sie mich also weitermachen und ein Auto bauen. Das ist eigentlich in meinem alten Auto. Schöner GAR, geh weiter und klicke auf Erstellen. Und da es noch keine aktiven Validierungsfehler gibt, haben wir diese Überprüfung, um zu sehen, dass der Modellstatus gültig ist. Es ist gültig. Dies heißt, wenn es ungültig ist, dann kehren Sie zu bezahlt zurück. Da es also gültig ist, wird es der Datenbank hinzugefügt. Ich werde nur diesen Haltepunkt entfernen, F5 drücken, um es weiterzumachen. Und dann leitet es die Weiterleitung zur Indexseite, auf dann die Abfrage ausgeführt wird, um alle Autos in die Datenbank zu bringen und sie anzuzeigen. So ist alles miteinander verbunden. Also werde ich versuchen , ein anderes Erstellen zu machen. Und ich setze einfach diesen Haltepunkt ein, nimm einfach und schau, was passiert. Wir klicken auf Erstellen und Sie werden sehen, dass es nicht einmal den Haltepunkt erreicht da es auf der Clientseite aktiv ablehnt, da die Validierungsregeln tatsächlich für die Felder, die auf den Regeln basieren, in denen wir sitzen. Wenn wir das Textfeld nach dem Namen hervorheben oder untersuchen, sehen wir hier, dass wir Daten haben, die Val gleich true ist. All diese werden also durch das JavaScript generiert. Zwischen unseren Regeln, die wir in C-Sharp eingerichtet haben, und den JavaScript-Bibliotheken auf dem Client sagten, dass alle diese Attribute dem Textfeld hinzugefügt wurden. Daten Val ist also gleich wahr bedeutet, dass ich Datenvalidierung in diesem Feld durchführen soll. Die Daten der Länge. Das bedeutet, dass der Fehler basierend auf der Länge die Fehlermeldung ist, die wir eingegeben haben. Das Maximum beträgt 150. All die kleinen Regeln, die wir eingerichtet hatten, werden Sie sehen, dass sie hier in den Foren der Attribute angewendet werden. Und wir hatten diesen zusätzlichen Code nicht. Und wenn Sie auf unsere HTML-Datei zurückblicken, ist es immer noch das gleiche Ischium. Wir haben es nicht eingegeben und es hat die Datei selbst nicht geändert. All dies geschieht jedes Mal, wenn die Webseite geladen wird, im laufenden Betrieb. Das haben wir getan, alles, was wir tun werden, ist, die Datenbank zu aktualisieren , weil sie gerade eine neue Migration erstellt hat. Und das ist etwas , das wir immer dann tun werden , wenn Sie eine Änderung an einer der Entitätsklassen vornehmen, eine Migration, in dokumentiert wird, welche Änderungen geschehen müssen. Und solltest du die Migration entfernen, welcher Cheat und muss rückgängig gemacht werden oder geändert werden. Und nach der Migration gehen wir zurück und sagen Update-Datenbank. Sie können also tatsächlich Tab verwenden. Wenn Sie einige von Ihnen eingeben, drücken Sie die Tabulatortaste , um den Rest der Update-Datenbank abzuschließen. Und wenn alles gut geht, wirst du fertig sehen. Jetzt gibt es Zeiten, in denen Sie Fehler bekommen. Vielleicht können einige der Änderungen, die Sie anwenden möchten , mit einigen der bereits vorhandenen Daten in Konflikt geraten . Manchmal passiert das, aber wie gesagt, jedes Mal, wenn diese Fehler auftreten, werden wir sie gemeinsam durcharbeiten. Sie können also eine gute Vorstellung davon haben , wie Sie etwas beheben können. Sollte es auftauchen? Wenn wir wiederkommen, werden wir unser Code-Abenteuer fortsetzen . Bisher haben wir das Create, wir haben das r, also haben wir das c, wir haben das R in Form dieser Indexseite. Und dann können wir als Nächstes bearbeiten. 11. Update hinzufügen: Alles klar, willkommen zurück Leute. Jetzt sind wir auf unserer neuen Aktivität, die darin besteht, die Bearbeitungsseite einzurichten. Die Bearbeitungen wären also das UN Rohöl-Update. In der Zeit, in der wir etwas bearbeiten, nehmen Sie im Grunde Aktualisierungen der vorhandenen Daten vor. So weiter auf der gleichen Ader von Gerüsten wird zu Recht Autos, Autos ordnen, weitergehen und erhitzen. Es gibt eine Seite, eine Seite, die Entity Framework verwendet. Und dann nennen wir es edit. Meine Begründung für die Verwendung dieser Seitennamen. Warum habe ich Bearbeitungen statt Update gesagt oder ich habe Index statt Liste gesagt. Sie werden feststellen, dass dies auf der Indexseite die Seitennamen sind. Es wird erwartet, dass dies jedoch nicht die gewünschten Seitennamen sind, können Sie sie jederzeit ändern. Wenn ich also wollte, dass dies Update statt edit sagt , dann wird das in Ordnung sein. Ich nenne es Updates. Ich habe diese Vorlage von Create to edit geändert , damit wir das Bearbeitungsformular erhalten und Sie den Unterschied zwischen den Vorlagen zum Erstellen und Bearbeiten sehen werden . Modalklasse ist immer noch Auto, Datenkontext bedeutet dieselbe Anzeige. Dann kriegen wir unsere zwei Fünftel. Also bekommen wir Updates, CSEA, Emaille und die Modelldatei dahinter, Schnee, das ist Update. Aber wenn ich zur Indexseite zurückkehre, wird der generierte Code nach der ASP-Seite suchen der ASP-Seite suchen wollen, die bearbeitet und nicht aktualisiert werden soll. Also okay, gut. Ich kann es einfach null machen Jeder freue mich auf die Update-Seite. Ich kann den Text auch ändern, wenn ich will, denn dies ist nur ein Anker-Tag. Was ist es, das ich anzeigen möchte? Ich kann sagen, dass ich das Update anzeigen möchte, aber ich lasse es beim Bearbeiten, da das Update nicht so benutzerfreundlich ist oder Benutzer sich nicht wirklich auf das Wort Update beziehen, wie sie es bearbeiten würden. Was Sie den Nutzern präsentieren. Immer wichtig. Aber du kannst ein wenig Spielraum mit deinen Pitch-Namen haben. Aber das ist alles, was ich demonstrieren wollte , indem ich keine Nimitz-Bearbeitungen, Namensnennungen und aktualisieren wollte. Sie möchten vorsichtig sein, wenn Sie gegen die Norm verstoßen, dann müssen Sie sich immer mehr treffen um Ihre Implementierung zu erleichtern. Andernfalls wird Ihr Bedarf an Anpassungen stark reduziert, wenn Sie sich an die Normen halten. Kommen wir zurück zu unserer Codedatei für die Update-CSS-HTML-Datei. Es ist also ziemlich dasselbe, wenn wir auch den Datenbankkontext injizieren, wir haben die gleiche Art von Bandeigenschaft, Eigenschaft, die wir im Create gesehen haben. Also werden wir das erstere haben. Wir werden Felder für das Auto im Forum haben. Wir mussten auf die Änderungen der Eigenschaftswerte achten , damit wir sie auf Post bearbeiten können. Beachten Sie jedoch, dass auf GitHub viel mehr Action im Gange ist, dann werden wir uns daran gewöhnt haben, und lasst uns einfach durchgehen, was hier passiert. Erstens würden Sie feststellen, dass dies asynchron ist, also haben sie es diesmal geschafft, und es hat einen Parameter für int id. Beachten Sie nun, dass dieser int ein Fragezeichen daneben hat. Also hätte ich vorher neoliberale Ins versus int erwähnt . int bedeutet also, dass es nicht optional ist, es muss mindestens 0 sein. Es gibt jedoch Zeiten, in denen Sie möglicherweise einen Nullwert in der Variablen benötigen , der ein int sein soll. In dieser Situation sagen sie im Grunde genommen, dass jemand versuchen kann , auf der Update-Seite zu navigieren, ohne eine ID anzugeben. In Ordnung, das bedeutet also , dass dieser ID-Wert null wäre, wenn er hier trifft . Das erste, was es tut, ist zu überprüfen, ob der ID-Wert null ist, und dann wird nicht gefunden zurückgegeben, weil ich nichts finden kann. Nein bedeutet nichts. Und wenn Sie mir sagen, dass Sie einen Datensatz mit nichts als ID bearbeiten möchten. Und wir haben bereits durchgemacht, dass diese ID dieser eindeutige Bezeichner in der Datenbank ist ? Es ist ein Primärschlüssel. Das ist der Ausweis. Wenn Sie mir sagen, dass Sie ein Datensatzsymbol bearbeiten möchten, wenden Sie sich an die Idee des Datensatzes, dass ich Ihnen sagen werde , ob es kein Telefon ist und ich es nicht richtig finden kann. Jedes Mal, wenn wir diese 404-Seiten auf einer Website bekommen, sie im Grunde genommen alles zurück, was sie tun , werden nicht angerufen. Alles klar. Wenn kein Ausweis angegeben wird, kann ich nichts finden. Das ist so ziemlich genau das, was wir für den Benutzer sehen. Wenn es jedoch darüber hinausgeht, können wir davon ausgehen, dass die ID einen Wert hat. Also versuchen wir diesen Wert in der Datenbank zu finden. Das heißt im Grunde, geh in den Kontext, gehe zum Autostall. Also gehen Sie später zu Entschuldigung, gehen Sie zum Autostall und besorgen Sie mir den ersten oder Standarddatensatz, bei dem die ID mit dem Wert übereinstimmt , der eingeht. Das nennen wir einen Lambda-Ausdruck. Alles klar, also mach zu viel. M hätte jeder Tolkien sein können, das hätte das Wort Rekord gleich w sein können, q gleich W2 Wort Welpe. M ist nicht, ist nichts offen besonderes. Aber m gefolgt von diesem Pfeil , den ich gerade den Lambda-Pfeil nenne, macht ihn zu einem Lambda-Ausdruck, was bedeutet, dass Sie im Grunde funktionelle Funktionen in einem definieren Aussage. Alles klar, also das ist ein Lambda-Ausdruck. Also hätte ich ein degeneriertes Elixier benutzen können, das ist in Ordnung. Aber ich hätte jeden Buchstaben, jedes Wort, jeden Tolkien benutzen und Tolkien-Pfeil sagen können. Dann repräsentiert der Tolkien im Grunde jeden Datensatz in der Datenbank. Anstatt dass ich also wie eine for-Schleife benutzen muss, weil wir bereits festgestellt haben, dass keine Autos wie eine Liste von Karten oder die Liste der Datensätze in der Datenbank sind. Wir haben uns bereits angeschaut, wie wir for-loops oder for-each Schleifen verwenden müssten , um zumindest alle Rekorde zu bekommen , anstatt zu sagen, hol mir die Autos. Und dann macht dies für jede Karte, die sich in der Datenbank befindet, wenn die ID übereinstimmt, wenn die ID übereinstimmt, im Grunde genommen all die Logik, die ich gerade für uns beschrieben habe. Der Tolkien hier repräsentiert also einen Datensatz in der Datenbank. Wir erhalten die Eigenschaften, damit ich m dot m dot name, m dot year sagen kann . Wenn ich also nach etwas suchen müsste, könnte ich diesen Lambda-Ausdruck verwenden, um Name nach Gehör zu suchen. In diesem Fall suchen wir nach ID. Die ID ist so viel der Wert, der durch den Browserversuch des Benutzers an diese Seite übergeben wird. Ich kann sehen, ob das Auto nein ist, weil sie vielleicht ID TIN bestanden haben und es kein Auto mit einem Ausweis zehn gibt, das bedeutet, dass nichts in die Datenbank geflogen wäre. Also sagen wir, wenn nichts gefunden wurde, geben wir die Seite zurück. Es gibt Möglichkeiten, wie Sie dies umgestalten können, aber ich kann erklären, warum es so geschrieben wurde und warum es wahrscheinlich neu gestalten möchte. Es wurde so geschrieben, weil eine Datenbank namens teuer ist. Ich betrachte sie gerne als eine teure Sache. Du machst es, wenn es überhaupt nötig ist. Willst du es einfach aus dem machen, aber nur weil so ziemlich das, was sie sagen, ist, dass wenn nichts zur Verfügung gestellt wurde, warte nicht. Eine Datenbank rief an, überprüfe, ob etwas bereitgestellt wurde, und wenn nicht, dann töte es genau dort. Die Person verschwendet Zeit und Ressourcen. Töte es genau dort. Verschwenden Sie den Datenbankaufruf nicht. Nachdem wir den Datenbankaufruf gemacht haben, wollten wir immer noch wissen, dass diese Betrachtung angerufen wurde? Wenn es nicht gefunden wird, kehren wir nicht gefunden 404 zurück. Andernfalls geben wir den pH-Wert mit den online geladenen Daten mit einem Create zurück, bei dem das Create nur das leere oder nur die Instanziierung des Autos hatte . Es war also nichts auf der Karte, das war leer. Deshalb bekommen wir das leere Formular. Weil der Auto-Punktname leer wäre. Auto-Punkt-Jahr wäre leer. Es liegt an uns, es zu füllen und es würde ausgefüllt und auf dem Postweg in die Datenbank eingegeben werden. In den Updates versuchten jedoch, dies mit Daten zu füllen, bevor wir zur Pizza zurückkehren. Denken Sie daran, dass ich gesagt habe, dass Sie alles in die Immobilien legen möchten , bevor Sie es an das tatsächliche Erscheinen senden bevor er die Nutzer bestritten hat. Genau wie beim Index sind wir auf dem Weg. Wir gingen weiter und haben die Abfrage ausgeführt. Denken Sie also daran, dass dies verwendet wurde, dies wird auf der Seite selbst verwendet, Modell-Punkt-Autos. Anders als bei dem Index, bei dem wir es nicht tun, tut uns leid, genau wie mit dem Index, in dem wir die Karten mit Daten füllen , bevor wir die Seite zurückgeben. Wir müssen das für das Update tun. Also müssen wir den Datensatz finden und dann die Seite zurückgeben. Und dann würde es automatisch die vorhandenen Werte binden , die aus dem Datenbankwerkzeug kommen, die Eingabefelder im generierten Formular, die in wenigen Sekunden betrachtet werden können. Deswegen wurde es also so geschrieben. Wenn keine ID angegeben ist, verschwenden Sie nicht die Datenbank, rufen Sie an, töten Sie die Ausführung. Ansonsten versuche es zu finden. Und wenn du es nicht finden kannst, töte die Hinrichtung , sonst zeige die Seite. Nein, dies könnte überarbeitet werden, um eine if-Anweisung zu haben da diese beiden if-Anweisungen, während sie nach zwei verschiedenen Szenarien suchen, wirklich dasselbe tun. Wenn wir eine andere Antwort auf eine andere Antwort wollten , müssen wir zwei Codezeilen ändern. Ein fragender Faktor könnte sein, dass wir den Datenbankaufruf riskieren. Wir versuchen es, das Auto trotzdem zu finden, wir bekommen den Wert nicht. In Ordnung, dann könnte ich einfach sagen, ob das Auto null ist, denn am Ende des Tages, wenn die Theorie Null bestanden wird, wird es nur sehen, ob die ID null entspricht, was niemals passieren würde. Das Auto wäre also null, wir kehren nicht gefunden zurück. Oder wenn dieser Wert 0 oder eine ID ist, die nicht existiert, wird Kyra immer noch null sein, zurückgeben, nicht angerufen. Sehen Sie, ich zeige Ihnen nur, dass der generierte Code, aber haben Sie keine Angst, ihn zu untersuchen und zu ändern, da Sie denken, dass es effizienter sein könnte. Aber ich gebe Ihnen die beiden Szenarien und erkläre, warum ein Szenario so eingerichtet wurde. Und was sind die Vor- und Nachteile davon? Jetzt, da wir eine Vorstellung davon haben, was der Beginn tut, und ich werde das nicht ändern. Ich lasse es so wie es ist. Nein, wir können uns ansehen, was die HTML-Seite uns zeigen muss. Die HTML-Seite wird also ziemlich identisch aussehen oder erstellen. An diesem Punkt, Nein, du siehst gut, dass es zwei dieselben Foren buchstäblich gibt, um ihm Formulare zu sehen. Der Unterschied hier wäre die degenerierte Form hier. Es heißt Update Car und ich bin gegangen , um das Auto zu bearbeiten. Nimm alles heraus , was es nicht braucht. Die Schaltfläche ist standardmäßig auf dekretiertem Formular speichern. Es hieß „schaffen“. Alles klar, und dann können wir uns noch einmal einfach einen Block nehmen und es hier rüberlegen. Wenn wir die Klasse dafür nicht wollten, dass MD4 heißt, könnten wir die sogenannte MD treffen, was auch immer es ist. Ich zeige Ihnen nur , dass die beiden Formulare in den meisten Webanwendungen zwischen einem Create- und einem Update-Formular im Allgemeinen identisch sind, sie sind im Allgemeinen identisch. An dieser Stelle könnten Sie eine weitere Designentscheidung treffen. Sie könnten eine Seite erstellen , die besagt, dass Upsert, Update und Inserts, die mentale Unterstützung unterstützen, in Richtung Update und Einfügen hervorgehen. Und sie nennen es absurd. Dieser absurde Pij würde so ziemlich im, ETC. Habe ich einen Ausweis bei Get bekommen habe ich einen Ausweis bekommen? Wenn ich einen Ausweis bekommen habe, habe ich versucht, das Auto zu finden und dann wieder zum Pitch zurückzukehren. Ansonsten lade einfach die leere Seite. Auf diese Weise werden, wenn Daten präsentiert werden, angezeigt. Wenn Daten nicht an Land vorgelegt werden. Und dann könnte er hier eine andere if-Anweisung machen, um zu sehen ob die ID in Shore einen Wert in der Schaltfläche vorhanden ist , oder die andere Schaltfläche mit der Bezeichnung dieser ist ein Update-Button anzuzeigen . Ich würde wollen, dass es btn-primär ist, ich möchte, dass es T ist, dass es eine Gefahr ist. Es ist also Orange. Ich zeige dir nur, ich bin nur, ich erkläre nur verschiedene Designüberlegungen. Jeder hat andere Kontexte. Und so mache ich vielleicht etwas , das du siehst, ob ich es nicht so machen muss . Oder du machst etwas an einem Kollegen oder einem Freund von dir und du siehst , dass du es nicht so tun musst. Kontexte sollten jedoch immer der entscheidende Faktor für Ihre Entscheidungen bei der Entwicklung einer Anwendung sein der entscheidende Faktor für . Lasst uns weitermachen. Ich mache das absurde Zeug nicht, ich gebe dir nur eine Idee. Aber der Punkt ist, dass die Formen fast identisch sind. würden dieselben Validierungsregeln angewendet. Der Buck zum Auflisten ist da, wir haben den Button, wir haben unsere Eingabefelder. Ich ordne das einfach neu an. Es sieht also genauso aus wie das Erstellen in Bezug auf die Reihenfolge der Felder. Aber es gibt eine Sache, auf die ich hinweisen wollte, und das ist, dass dieser Input für das Versteckte das alles im letzten geändert hat. Für das Versteckte. Wenn du zu unserem Create zurückkehrst, gibt es kein Verborgen. Für einen Ausweis. Dieses versteckte Feld ist absolut wichtig. Erstens ist es versteckt, weil unsere Benutzer unsere Primärschlüssel wirklich nicht kennen müssen . Denk darüber nach. Bei Amazon sehen Sie möglicherweise unsere Produktnummer, aber diese Nummer ist selten jemals. Der Pariah Mary-Schlüssel. Möglicherweise sehen Sie eine ISBN-Nummer für ein Buch oder so. Weißt du, eine ID-Nummer für unsere Studenten. Aber das ist selten jemals der Scheitelpunkt. Der Primärschlüssel ist intern im System. Es ist jedoch absolut notwendig für das Trucking. Was passiert, denn wenn dieser Primärschlüssel nicht in diesem Formular zurückgeführt wird, wird immer davon ausgegangen, dass dies ein neuer Datensatz ist. Alles klar, also müssen wir deshalb erstellen, dass ich es nicht habe, weil es immer ein neuer Rekord ist. Es gibt keine ID, wenn Sie etwas erstellen. Wenn Sie jedoch das Ganze bearbeiten oder aktualisieren , das wir durch die Huftiere gegangen sind das Ganze bearbeiten oder aktualisieren , ist es offensichtlich, dass die ID sehr wichtig ist. Und wir müssen uns über das Formular an die ID erinnern. Wenn diese Person die Formel einreicht, schlagen wir zurück zum On-Post, sehen Sie viel plötzlicher an Bord? Ja, wir haben es validiert. Wir haben bereits durchgemacht, wie die Validierung aussieht, das ist in Ordnung. Aber dann hier, wo wir Kontexte sagen Punkt angehängtes Auto und ändert den Status in modifiziert. Was hier wirklich passiert, ist, dass wir eine Datenbank sehen. Bitte fangen Sie an, dieses Objektauto zu fahren. Also hätten wir hier den ursprünglichen Autorekord bekommen. Wenn der Name eine Zucchini zum Sport war. Das haben wir hier. Das Jahr war 2013, das haben wir bekommen. Der Ausweis war drei. Nein, hören Sie nicht, nachdem es bearbeitet wurde, die Idee sollte niemals bearbeitet werden , da eine andere IID bedeutet, dass es sich um andere Datensätze handelt. Deshalb ist es versteckt und wir erlauben dem Benutzer nicht , es zu sehen oder damit zu unterbrechen, aber es wird im Hintergrund zurückgeführt. Wenn ich es jetzt von Suzuki geändert habe. Im Sport und in als, oh, es war kein Sport. Lass mich den Sport ausziehen. Was wir dann sehen, ist die Datenbank. Bitte schauen Sie sich diesen Datensatz und wissen Sie, dass er geändert wurde. Die Datenbank wird wissen , dass sie geändert wurde oder Entity Framework weiß, dass sie aufgrund der ID geändert oder anders ist. Es wird also davon ausgehen, dass sich etwas daran ändert. Das einzige, was sich nicht ändern sollte, ist die ID, weil ID vorhanden ist, das wird sie wissen. Okay. Ich habe eine Akte mit diesem Ausweis, oder? Nein. Was ich also tun werde, ist die Änderungen, die an diesem Datensatz vorgenommen wurden, mit dieser ID zu speichern die Änderungen, die an diesem Datensatz vorgenommen wurden . Im Wesentlichen wird er am Ende zwei Versionen haben. Es wird den ursprünglichen Datensatz haben, den wir gerade abgerufen haben. Und dann wird er diesen neuen Rekord oder diese neue Version des Datensatzes COVID haben , aber potenziell andere Eigenschaften. Und dann Änderungen speichern, sagen wir, okay, ich speichere die neuen Daten entsprechend in der Tabelle. In diesem Fall werden Sie sehen, dass wir einen Try-Fang haben, weil dies eine heiklere Situation ist. heißt, was wäre, wenn zwei Personen versuchen würden, das Auto zu aktualisieren? Ich habe auf „Dieses Auto bearbeiten“ geklickt. Sekunden bevor Sie auf „Dieses Auto bearbeiten“ geklickt haben, haben wir beide diesen Stahlrekord oder zumindest den beiden Strom benötigt, dann nehme ich eine Änderung vor. Ich habe es von 2013 auf 2015 geändert und klicke dann auf Speichern. Sie werden unter dem längeren Rekord ausgeben und alle Ihre Aufzeichnungen sind Stahl weil Sie die Version des Datensatzes hatten , bevor ich ihn aktualisiert habe. Wenn Sie auf Aktualisieren klicken, versuchen Sie, Änderungen zu speichern. Ich habe etwas gewonnen , das bereits aktualisiert wurde, seit du darauf geklickt hast. Das würde zu dieser Art von Fehler führen oder ich wusste nicht, ob ich versuchen und fangen von oder Ausnahmebehandlung, Ausnutzung von C-Sharp, es versuchen wir, die Änderungen zu speichern, aber dann ist es einfach skizzieren explizit diese DB-Update-Parallelitätsausnahme, genau das Szenario , das ich gerade erwähnt habe. Sie müssen das sehen, wenn das Auto nicht existiert, dann geben Sie kein Telefon zurück, weil es vielleicht gelöscht wurde, als ich versuche, es zu aktualisieren. Wenn es seitdem nicht denkt, geben Sie kein Telefon zurück, sonst werfen Sie einfach eine Ausnahme und Fehler mehr Griswold-Wege, um damit umzugehen, aber genau das ist es, was der generierte Code sagt uns. Das ist also kein Problem. Wenn der Prozess jedoch erfolgreich war, wurde nichts erwischt, dann geben wir die Indexrede zurück. Nein, das ist nur ein Methodenauto , das im Grunde nur wahr oder falsch zurückgibt. Datenbank überprüft das Auto stabil, wenn es einen Datensatz gibt. Und hier ist ein weiterer Lambda-Ausdruck. Und nur um Ihnen zu zeigen, dass der Tolkien wirklich keine Rolle spielt, ist derselbe Lambda-Ausdruck, aber wir haben m hier unten benutzt. Es ist derselbe Lambda-Ausdruck, der nur E. verwendet Wenn Sie sie erneut vergleichen möchten, kopieren Sie diesen einfach und legen Sie ihn in die Nähe. Ich habe mir die Tatsache angesehen, dass es sich um den gleichen Code handelt, nur zwei verschiedene Lambda Tolkiens. Es heißt im Grunde nur: Gibt es ein Auto in der Datenbank, das diese ID hat? Wenn ja, dann gut. Wenn nicht, dann kehre zurück. Ich habe nicht angerufen. Wenn es also existiert, bedeutet das, dass die Daten immer noch zu ändern versuche. Also wirft eine Ausnahme aus, oder wir könnten einfach einen Button-Fehler senden, der sagt, Hey, etwas ist schief gelaufen. Sie möchten diese Operation wahrscheinlich noch einmal versuchen. Okay, lassen Sie uns sehen, wie dieser Update-Vorgang funktioniert. Also gehe ich einfach weiter und springe rein. In Ordnung, also nein, schauen wir uns an, wie diese Update-Funktionalität funktioniert. Wenn ich auf „Bearbeiten“ klicke. Beachten Sie, dass es die Daten bringen wird. Das hätte kein roter Knopf sein sollen, das hätte eine Warnung sein sollen, nicht zehn Strichgefahr sein. Lassen Sie mich diese Änderung einfach vornehmen. Keine Warnung für einen orangefarbenen Knopf. Nachdem ich diese Änderung vorgenommen habe, kann ich einfach aktualisieren. Und da sind wir los. Nein, es ist ein orangefarbener Knopf. Lassen Sie uns also sehen, wie dieser Bearbeitungsvorgang aussieht. Beachten Sie in der URL, dass das Slash-Update für Autos und dann die Abfragezeichenfolgen angezeigt wird. Denken Sie also daran, als wir über eine Abfragezeichenfolge gesprochen haben, die als Daten über Formulare übertragen Wenn wir also ein GET verwenden, geben wir nicht an, dass es tatsächlich alle Daten- und Abfragezeichenfolgen einfügt , die gefährlich sein können. Und während wir an einer statischen Website arbeiten bei der nichts besonders Gefährliches von unserem Formular an irgendwohin übertragen wird, war es in Ordnung. Sie würden jedoch nicht bemerken, dass sie explizit Formulare mit Methode gleich Post generieren, denn wenn Sie die Daten veröffentlichen oder das Formular absenden, möchten Sie nicht senden Daten in der Abfragezeichenfolge. Vor allem , wenn Sie mit Kreditkarteninformationen oder persönlichen Daten der Benutzer zu tun mit Kreditkarteninformationen haben. Flug immer noch diesen Benutzernamen und das Passwort. Das willst du nicht in der Abfragezeichenfolge, die ich spreche. Obwohl es harmlos ist, die Abfragezeichenfolge für die ID zu verwenden, ist sie möglicherweise nicht harmlos, wenn Sie über das Formular absenden. Deshalb möchten wir immer sicherstellen, dass unsere Formulare, unsere Methode gleich posten. Lassen Sie uns jedoch ein wenig experimentieren. Also reden wir darüber, dass beide Löcher richtig werden. Wenn wir also mit der ID zum Index navigieren, setze ich hier einfach wieder einen Haltepunkt. Ich werde es nur aktualisieren wenn es den Breakpoint erreicht. Und wir bewegen den Mauszeiger über die ID-Eigenschaft, Sie sehen, dass diese ID übergeben wird. Das ist es also, was von geöffnet wurde. Wir erhalten die ID, die durch die Abfragezeichenfolge eingeht . Und dann können wir feststellen, okay, dieses Punkt-Auto gibt es in unserem System. Schau dir jetzt an, was passiert, wenn ich diese ID in eine ändere , die nicht existiert. Ich habe nur ein Auto in meiner System-ID. Es gibt kein Auto mit der ID TIN. Wenn ich versucht habe, dort zu bros, kriege ich zehn. Alles klar. Und wenn ich dann nur F5 mache und fortfahre, dann würdest du sehen, dass es nur heißt, dass man nicht HTTP oder Fluorophor angerufen werden kann . Dies ist es also, was wir bekommen , weil wir Return anrufen und nicht angerufen haben. Okay, das ist also im Grunde genommen Halt, das funktioniert. Beachten Sie nun noch einmal, dass dies eine On-Post-Methode ist. Die On-Post-Methode funktioniert mit dem Formular, das mit der Methode equals post übermittelt wird . Okay, also lass mich zurück zu den Aufzeichnungen gehen, die wir haben Lasst uns erreichen lassen. Das Jahr war also 2215, nicht 2013. Das ist in Ordnung. Ich wollte sparen und schaue mir das dann an. 2015. Denken Sie daran, dass dies jedes Mal aus der Datenbank geladen wird, wenn Sie auf den Index klicken die Datenbank abfragt. Was auch immer Sie hier sehen, ist der aktuelle Stand des Datensatzes, der auf den Punkt gebracht ist. Das ganze Update funktioniert. Egal wie kompliziert ein System aussehen mag, wie schick die Schaltflächen und Animationen und so weiter. Was wir hier tun, ist die Wurzel jedes einzelnen Systems, der Website, mit der Sie interagieren, alles, was sie tun, ist es Ihnen zu ermöglichen, Daten durch Reform in die Datenbank zu legen durch ein Formular geändert. Sehen Sie es sich über eine Indexseite oder eine Detailseite an, die wir uns in wenigen ansehen oder gelöscht werden. Irgendwann. Das ist alles , was wirklich passiert, egal auf welches System Sie sich ansehen. Wenn wir wiederkommen, werden wir uns mit der Implementierung oder Löschfunktion befassen . 12. Details Razor hinzufügen: Okay, also sind wir zurück. Und ich weiß, dass ich in der vorherigen Lektion gesagt habe dass wir am Löschen arbeiten würden, aber ich habe eine Überraschung für das Löschen, wir werden die Dinge für das Löschen etwas anders machen . Lasst uns stattdessen an unserer Detailrede arbeiten. Alles klar, lasst uns zu unserem Code übergehen. Und ich denke inzwischen kennen wir den Drew. Wir werden die Geschwindigkeit von Handgemenge oder Detailgenauigkeit erreichen. Klicken Sie also mit der rechten Maustaste auf den Ordner „Autos“, fügen Sie die Razor-Seite mit Entity Framework hinzu, wir nennen diese eine Und die Vorlage wäre die Vorlage für Details. Dann ist unser Modell Auto und alles andere bleibt übrig. Und wir erhalten unsere Seite für die Details mit entsprechenden Codedatei. Wissen Sie, dass die Detailseite so ziemlich nur eine weitere Seite ist , die uns hilft , die r von Corrode zu leiten, die gelesen wird. An dieser Stelle könnte es schwierig sein, die Relevanz der Detailseite zu erkennen. Denn was Ihnen die Detailseite wirklich zeigt, sind die Details von etwas, während der Index wirklich das Fehlen einer Vorschau zeigt. Wenn unsere Tabelle vielleicht 20 oder 50 verschiedene Felder hätte, vielleicht sogar zehn Felder, würden Sie nicht alle auf der Liste haben wollen. Denkbar wie eine Kosten, eine Kundenliste oder sogar bei Amazon. Wenn Sie sich die Produkte bei Amazon ansehen, zeigen sie Ihnen nicht alles über das Protein. Sie zeigen Ihnen den Namen, ihren Preis, vielleicht wie lange es dauern würde, bis der Versand erfolgt. Aber wenn Sie dann auf das Produkt klicken, sehen Sie alles, was ich einen Prototyp baue, Sie sehen alle möglichen Größen und Farben und woher es stammt und aus welchem Material es besteht usw. wirklich wofür die Detailseite konzipiert ist. In diesem Fall ist es argumentiert, dass es optional ist, weil Auto wirklich, wenn es zwei Details hat, die an irgendwelchen Stellen das Ohr und der Name sind, zu zeigen sind. Nun, noch einmal, wenn es eine größere Tabelle mit weiteren Details wäre, die angezeigt werden müssen würden Sie zu diesem Zeitpunkt nicht alle im Index auflisten wollen . Du würdest mir wahrscheinlich nicht zeigen wollen, dass das Jahr des Autos oder der Name des Autos bin. Sagen wir also, wir wollten das Jahr nicht zeigen. Ich werde das einfach auskommentieren. Wenn Sie sich also die Indexseite ansehen, sehen Sie nur den Namen des Autos. Sie möchten jedoch die restlichen Details über das Auto sehen . Sie klicken hier auf die Detailseite, auf der sie den Link haben , und wissen dann, dass wir die Seite erstellt haben , wir haben sie verkabelt. Also wird es zu dieser Detailseite gehen , die CSS HTML enthält. Ich werde das einfach ändern , um Autodetails zu sagen. Befreien Sie sich von jedem Doug, es gibt ein altes Formular, denn es liest wieder nur Daten, Daten als automatisch generierter Link, um zu Bearbeiten zu wechseln. Also hier ist eine andere Sache. Es sucht, editieren Sie aus dem Feld heraus. Wir verwenden das Update des Seitennamens. Also muss ich sicherstellen, dass ich das ändern werde. Dann können wir zurück zur Liste gehen, wenn wir dies wünschen. Okay, also was macht die Detailseite oder die Codedatei wirklich? Es hat ein Immobilienauto, es hat keine Bend-Eigenschaftsklausel. Es ist kein ausländisches Anwesend, hat aber das Eigentum. Und dann macht es dasselbe, wo es heißt Hol mir den Rekord mit dem Jod sucht nach dieser ID. Wenn es null ist, wird die Rücksendung nicht angerufen. Es ist nicht null, dann versucht es den Datensatz zu finden. Wenn Sie den Datensatz finden können, Es ist kein Telefon, geben Sie die Seite zurück. Dies ist also derselbe Code , den wir für die für die Bearbeitungsseite generiert haben. Okay, ich werde die Änderungen hier nicht vornehmen. Diese haben beides zum Vergleich des regulären Out-Of-Box-Wertes gegenüber unserer kleinen Änderung, bei der wir gerade einen Datenbankaufruf durchgeführt haben und feststellen, ob er nicht gefunden wurde. Sie können diese also vergleichen, aber lassen Sie uns weiterlaufen. Also gehe ich einfach zu Control F5 , damit wir uns ansehen können, welche Details uns der pH-Wert von unserer Indexseite bringt. Wenn ich auf Details treffe, sehe ich Kartendetails und es wird mir alle Details geben. Dies wird also noch einmal generiert. Sie können das Aussehen und die Haptik von ihm nach Bedarf ändern. Von hier aus kann ich drauf klicken. Und weil ich den Link geändert habe, habe ich kein Problem, zur Bearbeitungsseite zu springen. Ich kann zurück zur Liste gehen. Wieder einmal ist die gesamte Navigation hier eng gekoppelt, da jeder Link weiß, wo er zu finden ist. Das ist sehr, sehr wichtig von jedem pH-Wert, Sie sollten in der Lage sein, zu einer anderen Seite zu navigieren. Oder der nullpH-Wert sollte je nach Größe einer Website mehr als zwei oder drei Klicks betragen. Es gibt jedoch in der Regel eine Drei-Klick-Richtlinie für Touren , wenn es darum geht, zwischen Seiten zu navigieren. Das ist es wirklich für die Details, nett und einfach, verglichen mit all dem, was wir beim Erstellen und Bearbeiten durchgemacht haben mit all dem, was wir beim Erstellen und Bearbeiten durchgemacht um zu sehen, dass die Details wirklich nur in die Aufzeichnung geladen sind und uns zeigen. Sie können ändern, was im Index angezeigt wird. Wenn Sie nicht alle Daten auf der Indexseite möchten , haben wir deshalb die Detailseite, um anzuzeigen, was nicht in der Liste angezeigt wurde. Wenn wir zurückkommen, werden wir uns ansehen, etwas jQuery mit unserem Löschen zu verwenden. Denn mit unserem Löschen werde ich nicht die ganze Seite für den Löschvorgang erstellen. Sie haben zwei Möglichkeiten, es zu betrachten, und wir werden die Möglichkeiten untersuchen , wenn wir wiederkommen. 13. Razor Seite hinzufügen: Leute, willkommen zurück. Wir werden uns bemühen , mit unserem Löschbetrieb zu arbeiten . Ich begann zu erwähnen , dass es im Allgemeinen zwei Modelle gibt , die regeln, dass das Löschen stattfindet. Erstens können Sie die Lead-Pitch sehen, die wirklich wie eine detaillierte Rede ist, aber es dient auch als Bestätigungsseite, weil Sie dem Benutzer erlauben möchten, den Datensatz zu sehen, den er löschen kann und dann frag sie: Bist du sicher, dass du löschen möchtest? Schauen wir uns zuerst die 1 an. Das folgt dem gleichen Muster, dem wir verfolgt haben. Fügen Sie mit Entity Framework eine neue Razor-Seite hinzu. Ich nenne das einen Delete. Aus der Vorlage. Ich wähle einfach die Bedürfnisse oder das gleiche Modell aus. Dann erhalten wir unsere generierte Seite zum Löschen mit ihrer Codedatei. Wenn wir also den DB-Kontext injizieren, haben wir auch einen geeigneten Knopf für das Auto. also irgendeine Form der wird also irgendeine Form der Form oder Datenerfassung hier stattfinden. Auf Git haben wir die gleiche Logik, die wir gerade bei der Bearbeitung gesehen haben. Die Detailseite, auf der wir die ID erhalten, stellen Sie sicher, dass sie nicht null ist, holen Sie den Datensatz und kehren Sie zum pH-Wert zurück, wenn ich aufnehme. Aber dann wird auf dem Beitrag auch überprüft, dass die ID nicht leer ist. Beachten Sie also, dass es nur nach der ID auf Post sucht. Es ist sehr möglich, einfach einen Parameter zu nehmen , der den Daten auf der Seite entspricht . Lassen Sie mich hier einfach die Parallele laufen. Mit unserem Update-Betrieb. Wir sagten, Immobilien für das gesamte Auto zu kaufen. Beachten Sie, dass es keine Parameter in der onPause gibt. Das liegt daran, dass das gesamte Autoobjekt Felder auf dem Formular hatte. Also hatten wir einen Ausweis, wir hatten den Namen, wir hatten das Jahr. Wenn wir also auf Speichern klicken, würde es tatsächlich alle Datenpunkte serialisieren , die eingegeben wurden, und sie in Autos platzieren. Deshalb binde ich Eigenschaften und trage im Grunde genommen, welche Daten in das Objekt eingeflossen sind, dann können wir damit arbeiten. Wenn ich den Fall eines Löschens kenne, muss ich den Namen und das Jahr wirklich nicht kennen. Ich muss wirklich nur wissen, wie die ID des Datensatzes ist , der gelöscht werden muss. Dann kann ich in der onPause angeben , dass ich nur nach der ID suche. Wieder einmal kann ich alle Schecks machen. Prüfen Sie, ob es null ist. Ich meine, wenn ich versuche, nichts zu löschen, dann gib keinen Ordner zurück, aber versuche ansonsten, den Autodatensatz zu finden , der entfernt werden muss. werden wir dieses Mal einfach asynchron verwenden. Es unterscheidet sich also irgendwie von den Standardwerten erster Ordnung, da diese Sing die Schlüsselwerte verwendet, damit ich mich in Id zerstreuen kann , im Gegensatz zu den ersten oder Standardwerten, die eine Bedingung erfordern oder dieser Lambda-Ausdruck, wo das stimmt, dann bekommen wir ein Auto, während der Fund, den er sehen wird, zum Tisch gehen und einen Datensatz mit dieser ID für den Primärschlüssel finden wird , auf den natürlich immer noch läuft das Risiko, dass es nein ist. Also haben wir versucht, das Auto zu finden. Würde diese ID, wenn das Auto nicht gleich nein ist, dann entfernen wir die Fahrzeugdatenbank, holen die Autotabelle holen die Autotabelle und entfernen diesen Datensatz. Also müssen wir den Rekord finden. Dann entfernen wir den Datensatz. Wieder einmal erweitern wir Daten, damit wir Änderungen speichern. Nach all dem kehren wir zum Index zurück. Selbst wenn Kiara in diesem Fall Modus war, werden wir keine angerufen zurückgeben. Wir werden nur zu Index Goes umleiten. Vielleicht versuchen Sie etwas zu löschen , das wichtig war, wenn Sie auf die Lead klicken, jemand anderes, er brauchte es, kein Schaden, kein Foul, kehren Sie einfach zum Index zurück. Wieder einmal ist dies nur generierter Code. Wenn Sie in Ihren Szenarien etwas anderes machen möchten, können Sie es nach Bedarf ändern. Dieses Szenario funktioniert gut , denn wenn wir zum Löschen gehen, sehen wir eines. Es sieht genauso aus wie die Details. Dies ist derselbe Code, der sich auf der Detailseite befand. Wir haben jedoch eine Botschaft. Bist du sicher, dass du das löschen möchtest? Ich werde einfach tun, was wir immer hier tun, wo ich sehe, dass die Top-Änderungen auf das Auto löschen klicken. Bist du sicher, dass du das löschen möchtest? Wir haben die Details des Autos gezeigt, aber schauen Sie sich das Formular an. Dieses Mal haben wir ein Formular für alles, was in dieser Form ist. Nun, ja, es ist Methodenpost, aber alles was es hat ist die versteckte Auto-ID. Das ist die P4-Basisanalyse. Das Ich bin ich werde mich an diese Eigenschaft binden. Sie hätten also dieses ESP-Formular gesehen, das Erstellen, alles sehen, was die Aktualisierungen enthält, die an diese Eigenschaft Auto-Punkt-ID gebunden sind. Aber dann ist der Name der Eigenschaft ID. Und dann wird es im Delete einfach an die Parameter-ID gebunden. So weiß ich, dass ich nur die ID von dieser Formularübermittlung bekomme. Hier sehen wir, dass es sich um einen Absende-Button mit dem gültigen Löschen handelt und es ist eine BTN Strichgefahr, die sinnvoll ist. Wenn Sie Ihre Meinung ändern, können Sie jederzeit zur Liste zurückkehren. Alles klar, schauen wir uns an, was wir mit dem Löschen bekommen. Aus der Liste klicke ich zum Löschen. Es wird meinen Datensatz laden, Autos löschen, also möchten Sie diesen löschen. Und so können wir in den Details des Datensatzes auswählen, ob wir löschen möchten oder wir können wählen, dass wir zur Liste zurückkehren möchten. Wenn ich also auf Löschen klicke, geht es zurück zur Liste und es gibt kein Auto mehr in meiner Datenbank oder zumindest die Datenbankgesetze. Eine Karte weniger und sie hatte bevor ich diese Operation gemacht habe. Ich werde einfach erstellen, das Auto schnell neu zu erstellen. Suzuki Swift Sport. Und es war ein 2013 würde und schaffen. Okay, also haben wir unsere Akte wieder und Sie können dies für so viele Datensätze tun, wie Sie benötigen. Das ist also Option eins. Sie möchten dem Benutzer erlauben, den Datensatz zu überprüfen und ihn zu fragen: Sind Sie sicher, dass er nicht gelöscht werden konnte und bestätigen Sie? Wissen Sie was, wenn ich keine ganz andere Seite nur für den Löschvorgang einführen möchte . Was ist, wenn ich das hier wollte? Wenn die Person auf Löschen klickt, habe ich sie vielleicht gefragt, dass sie auftaucht. Bist du sicher, dass du löschen möchtest? Klicken Sie auf Ja, und dann erfolgt das Löschen. Lassen Sie uns etwas ausprobieren, dass keine Implementierungsmethode darin besteht, jeden Lösch-Link in ein Formular zu wickeln und ihn zu einer Schaltfläche zum Senden zu machen , anstatt nur eine URL zum Löschen. Ja, wir haben die Seite, aber gehen wir zurück zu unserem Index und ändern oder was hier passiert. Ich könnte gleich hier Formular sagen. Lass mich meine Rechtschreibung richtig machen. In diesem Formular haben wir einen Button. Dieser Button wird im Grunde dasselbe sehen , was der aktuelle Button nicht gegessen hat. Ich möchte nicht, dass es unbedingt wie ein Knopf aussieht. Ich meine, ich schätze, zu diesem Zeitpunkt können wir wahrscheinlich auch mit unseren Links kreativ werden. Also kein Problem. Ich sage einfach, dass Klasse gleich vt n Dash ist. Das ist Edit. Also werde ich wahrscheinlich wollen, dass es wie eine Warnung ist. Das war's. Es ist ein Knopf. Natürlich muss jeder Button T sein und dann den Buttontyp streichen. Dies ist ein Detail, also wären dies b2-Brancheninformationen, nur um die Informationen anzuzeigen. Und dann wird dieser Button gleich b2 und gefährlich sein, nein, ich kann nicht sagen, welcher Button ist, welcher ein Link ist. Alle von ihnen werden gleich aussehen. Wir haben diesen Lösch-Button. Was wir tun können, ist onclick zu sagen. Wir haben uns diese Ereignissachen bereits angeschaut wenn wir früher über JavaScript sprechen, kann ich sehen: Sind Sie sicher, dass Sie diesen Datensatz löschen möchten? Also auf Klick werde ich eine Bestätigung zurückgeben. Das ist also eine eingebaute Methode. Und wann werden wir uns die Alert-Methode in JavaScript ansehen? Bei Klick, bestätigt ist nur eine weitere JavaScripts-Methode ich sehe, unclick return, bestätige. Sind Sie sicher, dass Sie diesen Datensatz löschen möchten ? Ich bin das gibt im Grunde nur eine Ja, Nein-Box. Das ist wirklich alles was ich für den Button brauche. Aber dann zurück zum Formular eins. Wir möchten sicherstellen, dass es der Methodenpost ist. Jetzt werde ich erklären, warum wir explizit darüber sprechen wollten , dass es Post ist. Es passiert eine Reihe von Dingen mit den Beiträgen. Die impliziten Vorteile der Verwendung der bereits erforschten Beiträge, in denen wir darüber gesprochen haben, dass die Daten nicht in der URL gesendet werden. Es ist im Hintergrund versteckt. Das ist also gut. Ich bin inhärenter Schutz für sensible Daten wie Benutzername, Passwort, Kreditkarteninformationen usw. Nein, du würdest dich wahrscheinlich fragen, okay, also was seit Lieferbar, vielleicht der Ausweis. Nun, wir haben bereits gesehen, dass sie schon damals im Delete Forum versucht haben, den Beitrag hier zu verwenden , weil das gleiche Konzept die ID getroffen hat und dann den Lösch-Button hatten. Es ist das Gleiche, was wir tun, außer dass wir es in der Liste im Index tun . Aber dann wären andere Vorteile des Beitrags , der in ASP.Net Core integriert ist, unsere Sicherheitsfunktionen gegen XSS und das CRS bei Angriffen. Es ist im Wesentlichen, ohne auf die Details darüber einzugehen , was diese beiden bedeuten und so weiter. Die Art und Weise, wie sie funktionieren , wäre, dass Menschen JavaScript verwenden und Daten, die über die Leitung gesendet werden, böswillig entführen können . Was ASP.Net hat integriert oder ASP.Net Core. Jedes Mal, wenn Sie ein Formular haben und es zu einem Methodenbeitrag machen, und dann haben Sie das auf dem Beitrag, der auf diese Art von Sendung in dieser Beitragsübermittlung wartet . Sie haben den Anti-Ausländer Tolkiens bestätigt , dass alle Anfragen, die in einen Posten kommen , vom System gültig sind und nicht von einer externen Einheit entführt werden. Okay, das ist also wie eine Sicherheitsfunktion , die integriert ist. Ich gebe an, ich habe nicht erwähnt, dass Sie nicht bemerken würden , dass all das wirklich im Hintergrund passiert. Deshalb ist es wichtig, dass Sie, obwohl wir hier nicht generieren oder bilden, obwohl wir hier nicht generieren oder bilden, immer sicherstellen möchten, dass Sie es als Methodenpost haben und diese Sicherheitsfunktionen fast impliziert sind. Andere Dinge, die wir jetzt tun wollen , da wir das Formular haben, haben wir den Button, wir müssen ihm sagen, wohin wir gehen sollen. Wenn ich nun seltsam zum Ziel sage, meine ich, dass die anderen Seiten Foren hatten, wie mal sehen, das Erstellen haben sie das Formular erstellt, das er gesagt hatte Methodenpost. Es hatte nichts explizites, um zu sagen , wohin es gehen sollte. liegt daran, dass es sich nach dem Absenden des Formulars um eine Post-Anfrage handelt. Also wird es automatisch zum On-Post gehen. Ansonsten wird es dasselbe mit den Updates bekommen, das Gleiche mit dem Löschindex hat jedoch nur einen auf Get. Es hat keine Beiträge. Und wir werden wissen, dass wir ein Formular erstellen , das versucht, eine Post-Methode auf der Indexseite aufzurufen , die nicht existiert. Was wir jetzt tun können, ist benutzerdefinierte Handler zu erstellen. Also nur Buck Trucking, nur damit wir verstehen, auf dem Post zu kommen. Und derjenige, den wir erstellen können, nennt man Handler. Diese Methoden bekommen, posten, tun was auch immer im Hintergrund, sie sind Handler. Deshalb rufen wir sie an. Wir müssen dem Formular mitteilen, dass es zu seinem ISP, P Dash Page Dash-Handler gehen soll . Ich gehe zu DDGT. Das ist der Name des Handlers, zu dem er gehen sollte. Die Methode ist post. Nein. Darüber hinaus wollte ich auch den ID-Wert abrufen. Ich werde sehen, ist B-Dash, schrieb eine Dash-ID. Das sage ich nicht, dass ich beim Absenden des Formulars möchte, dass ich einen Wert oder einen Abfragezeichenfolgenwert mit diesem Namen übergeben habe . Wenn ich also Auto-ID sage oder wenn ich breiig sage, was auch immer dieser Typ ist, nachdem das Wort geschrieben wurde, ist das der Name der Abfragezeichenfolge, die den Namen des Parameters angibt ist das der Name der Abfragezeichenfolge , die den Namen des , nach dem mein Handler suchen wird . Also lasse ich es als Auto-Jod statt nur als Ausweis. Okay, also kannst du jetzt explizit sehen, was ich meine. Also ASP Strichroute, Fahrzeug-ID, sollte es den Wert von bei Zeichenpunkt-Punkt-ID haben. Beachten Sie jedes Mal, wenn wir auf Bearbeiten oder Details geklickt haben, dass es automatisch über die ID gesendet wird. liegt daran, dass aus der for-each-Schleife jedes Element gebunden ist, das hier eine p Root-Strich-ID ist. Das passiert also schon. Wir sehen, dass es passiert , wenn Sie auf Details klicken. Es heißt Detailseite und sendet über den ID-Wert. Deshalb achtet es bei Get nach Ausweis. Genau wie bei Details oder Delete eher auf Post, es sucht nach ID, und das liegt daran, dass das Löschen, lass es mich schnell im Löschen finden, wir sitzen tatsächlich hier. Ich zeige dir nur verschiedene Geschmacksrichtungen. Sie erhalten den generierten Code, aber es ist gut zu verstehen, wie Sie dasselbe auf verschiedene Arten tun können. Dies funktioniert mit dem Formular und es wird diese Woche über die ID gesendet. Dies funktioniert auch mit weniger Codezeilen, nur mit dem Formular. Gehen Sie jedoch zu diesem Seiten-Handler und senden Sie einen Parameter namens Car ID mit demselben ID-Wert. Es ist ein Methodenbeitrag. Wir fügen diese Bestätigung dem Button hinzu. Und ich werde nur den bestehenden Link kommentieren . Aber was wir jetzt tun werden , ist diesen Delete-Handler in der Indexdatei zu erstellen . Im Indexcode dahinter. Ich kann dies erweitern und ich kann öffentlich sagen und es nicht zu einer asynchronen Aufgabe machen. Nehmen wir an, das Ergebnis der Task-Aktion , weil ich möchte, dass es ein tatsächliches Ergebnis zurückgibt. Und ich sage auf Post, lösche. Wir schauen uns die Syntax an, wenn wir auf Post kommen. Und ich kann Post async sagen, wenn ich will. Das ist eine Namenskonvention , die sie erkennen. Das ist fakultativ. Aber mein Punkt ist, dass ich weiß es sich um eine Post-Methode aus dem Forum handelt, also muss ich auf dem Beitrag angeben, um das Löschen aufzurufen. Ich sagte, dein Handler ist Löschungen. Es wird automatisch nach einem Handler namens delete suchen , der eine Post-Antwort erwartet. also nur ein Poster auf Git aufsetzen, wird dem Handler mitteilen, nach welcher Art von Befragten aus dem Versuch des Präsidiums, einen Beitrag zu löschen, suchen sollte . Was ich wirklich tun werde, ist diesen Code einfach wiederzuverwenden. Ich kopiere das einfach aus dem generierten Löschen. Bestimmte Dinge werden nicht erwachsen, aber das ist in Ordnung. Wir können die Lücken ausfüllen, aber am wichtigsten wären es die Parameter. Also sage ich int Fragezeichen Auto-ID. Warum Auto-ID? Weil ich in meiner Form, dem Index, gesehen habe, dass Ihre ASPE-Root eine Auto-ID für alle anderen ist, es war ID. Was hierfür? Ich sage einen Auto-Ausweis. Ich mache es aus irgendeinem besonderen Grund nicht. Ich zeig es dir nur. Was die ASP-Wurzel wirklich macht. Wenn ich die ID ändere, muss mein Handler nach einer ID suchen. Wenn ich es in Puppy umgestellt habe, muss es nach einem Welpen suchen. Ich lasse es einfach als Auto-ID nur damit wir den Unterschied erkennen können. Also Auto-ID aus dem Formular, es wird den pH 100 delete aufrufen und es ist eine Post-Methode. Es wird also hier rüber gehen und nach einem Handler namens delete suchen , für Post-Antworten entwickelt wurde , der den Parameter namens Car ID annimmt, dann muss der Code angepasst werden da kein Ausweis hier kein Ausweis mehr ist, ist es kein Auto-Ausweis, Auto-ID. Jetzt hatte ich gesehen, dass es kein Auto gibt ein Auto sicher ist, das ist in Ordnung. Ich kann leicht sehen, gebe mir eine lokale Variable namens Auto, weil ich wie beim letzten Mal keine Eigenschaft der Klasse brauche . Ich brauche nur ein lokales Anwesen namens Auto. Geh und finde das Auto. Hast du das Auto gefunden? Ja oder nein? Wenn ja, dann entferne das Auto. Okay, das ist also nur meine lokale Variable innerhalb des Löschens. Als Sie also auf Löschen klicken, haben wir versucht, eine ID zu finden, Sir. Wir haben versucht, diese zu ermitteln. Id habe einen Wert. Wenn nicht angerufen. Du würdest wahrscheinlich nicht hier telefonieren wollen . Wenn wir direkt aus dem Index löschen, dann ist das in Ordnung, das ist in Ordnung. Wir können es verlassen. Ich meine, der Kontext wird erneut bestimmen, wie Sie eine Erfahrung nutzen möchten. Das ist also in Ordnung. Wir verlassen es und lassen es als diesen Auto-Ausweis. Wenn Sie darauf klicken und nicht angerufen haben, versuchen Sie das Auto zu finden. Wenn das Auto nicht gleich Null ist, entfernen wir es und laden dann die Indexseite neu. Lesen Sie Erich zu *****. Nun, das könnte leicht auf Seite umgeleitet werden , in der nichts drin ist. Es würde also buchstäblich nur sagen, auf welcher Seite stehe ich? Lass mich diese Seite neu laden. Wir könnten auch sagen, Return Pitch. Deswegen habe ich es getan. Eigentlich Ergebnisse habe ich hier. Im Gegensatz zu diesem hatte dies keinen Rückgabetyp. Es brauchte also nicht die I-Action-Ergebnisse. Aber in diesem Fall möchte ich eine Form von Befehl zurückgeben , um zu sagen, bring mich zurück zu der Seite, auf der ich bin. Deshalb sagte ich hier Aufgabe, Aktionsergebnis. Retinol leitet einfach die Weiterleitung zur Seite ohne Werte durch. Also zeige ich dir nur die verschiedenen Szenarien. Sobald Sie sich wohl fühlen, fangen Sie an, den Code auf Expertenebene zu schreiben , dann würden Sie sagen, okay, ja, ich sehe, wie alles zusammenpasst und alles funktioniert. Lassen Sie uns diesen anderen Delete oder diesen alternativen Löschcode für einen Testlauf nehmen. So gut, es hat Autos gebraucht und dann okay, wir können dieses Anzeigeproblem später beheben. Kein Problem. Löschen geklickt. Hier ist unsere Aufforderung. Sind Sie sicher, dass Sie diesen Datensatz löschen möchten ? Wenn wir auf Okay klicken, geht es, es hat den Handler verursacht, das Löschen hat es Eric auf den pH-Wert gelesen. Lassen Sie uns also ein weiteres Testauto erstellen. Ein zufälliges Jahr. Ich setze einen Bruchpunkt ein. Ich bin nicht im Debug-Modus. Lassen Sie mich in den Debug-Modus übergehen und dann können wir einen Haltepunkt setzen, um zu sehen, was passiert. Wenn ich auf Löschen klicke. Ich bekomme den Aufforderungsklick, Okay, dann ruft es den Handler an. Es wusste also noch einmal, wo suchen sollte, weil ich dem Formular gesagt habe, diese bestimmte Methode verwende und diese bestimmte Routen-ID übergebe. Und das ist die Methodenanforderung, die zu verwendende Methode. Alle drei verbinden sich, um das Formular null zu lassen , das es möchte, eingereicht wird. Es sollte diesen Handler und die Codierungsseite dieses Handlers treffen , der Name deutet darauf hin, dass es ein 100 ist, der dieses Szenario bewältigen soll. Dieses Szenario ist, dass ich dieses Auto löschen möchte, Auto-IDs drei, in Ordnung, also sehen wir, dass die Routen-ID durchläuft. Nun, offensichtlich hat es das Auto in der Datenbank angerufen oder es findet die aktuelle Datenbank, entfernt sie und leitet dann auf die Seite um, auf der es sich befindet. Also lass mich einfach F5 drücken und du siehst, du liest einfach Eric ohne Hektik. Okay, also habe ich einfach schnell das Display repariert Sie hier mit den Tasten haben. Und es ist eine wirklich einfache Lösung. Wahrscheinlichkeit, sogar ein HUC, je nachdem, wie man es sieht. Aber anstatt die Anker-Tags auf die alte Seite zu stellen, lege ich einfach alles in die Form, weil die Form die Linien gebrochen hat. Also lege ich einfach die Anker-Tags in das Formular und das ist wirklich zu wissen , denn am Ende des Tages wird nur der Button die Einreichung durchführen. Wenn ich auf Bearbeiten klicke, navigiert es einfach weg. Wenn ich auf Details klicke, navigiert es weg. Wenn ich dann auf Löschen klicke, werde ich dazu aufgefordert, effektiv abgebrochen zu werden. Nichts passiert. Und wenn ich dann auf Okay klicke, haben wir gesehen, was passiert. Das ist Loch. Sie können anfangen, ein wenig JavaScript im Knoten zu arbeiten , um zu sehen , okay, nun, das soll es tun. Wenn wir wiederkommen, zeige ich dir ein bisschen mehr JavaScript. Ich werde anfangen, unsere Seiten zu stylen , weil wir sehen, dass unsere Schaltfläche „ Erstellen“ oben ist. Es sieht aus wie ein Link. Wir haben angefangen total anzuschauen, um die Schaltfläche Bearbeiten zu stylen, die Schaltflächenliste ist immer noch ein Link. Die Details haben zwei Links. Wenn wir also wiederkommen, schauen wir uns eine robustere Bestätigungsaufforderung an. Wir werden diese Bibliothek namens Sweet Alerts verwenden. Das ist einer. Und wie können wir JavaScript oder jQuery verwenden, um das zu bekommen. Und zwei werden anfangen, RPGs ein bisschen mehr zu stylen. 14. Verwenden von Partialen Ansichten und UI-Verbesserungen: Alles klar, willkommen zurück. Unser Ziel für diese Lektion ist es also, alle unsere Links mit einem Stil ein bisschen freundlicher auszusehen. Und was wir tun wollen, ist eine etwas robustere Bestätigung zumindest eine etwas robustere Bestätigung für die Löschung. Lasst uns anfangen. Lassen Sie uns zunächst die Änderung erstellen und einen Link erstellen. Lassen Sie mich aus dem Debug-Modus springen, gehen Sie zu meiner Datei index.html und hier ist die Schaltfläche Erstellen. Wir haben also gesehen, dass alles, was wir für unsere Anker-Tags tun ihnen den Strich der Klasse BTN zu geben. Ich bin primär für das Create. Lassen Sie uns dort etwas kreativer werden, wenn Sie vielleicht darüber nachdenken möchten, die Icons in Ordnung zu bringen? Manchmal möchten Sie also nicht das ganze Wort bearbeiten oder das ganze Wort Details. Und Sie können diese Pfeifensymbole sogar ein wenig entfernen. Oder sogar wie das Create, das du wahrscheinlich willst und es ist ein Pluszeichen für seine Seele. Was wir dafür verwenden können, wäre Font Awesome, eine Bibliothek mit einer Reihe von Symbolen. Und wir können es uns schnell ansehen. Wenn Sie zu Font Awesome.com springen und wir uns die Icons in Version 4.7 ansehen, werden Sie feststellen, dass Sie einige Icons haben , die Sie verwenden können. Die meisten von ihnen sind kostenlos. Möglicherweise müssen Sie ein Konto bezahlen oder sich für ein Konto anmelden, das sie haben, aber das ist in Ordnung. Aber im Moment gibt es so viele Icons, dass du aus der Box kommst , dass es wirklich cool ist. Wenn Sie also ein Pluszeichen wünschen, habe ich sicher eine Pelosi-Verwendung von Plus. Ich denke, sie haben wie eine Bohne oder Müll oder etwas , das Löschen bedeutet. Aber sie haben einige Icons, die wir verwenden können , um nur bestimmte Dinge anzuzeigen. Los geht's, Müll. Manchmal willst du also ein Icon. Was glaubst du, was du sein könntest? Es nennt sich etwas anderes, aber kein Problem. Mal sehen, wie wir dies in unser Projekt integrieren können. Zurück zu unserem Code. Wir können mit der rechten Maustaste auf dub, dub, dub root folder klicken. Und dann können wir eine clientseitige Bibliothek hinzufügen. Wenn wir das tun, müssen wir nur die Schrift eingeben. Auch viele Sitze sind uns schon irgendwie zu füllen geschuldet. Also Schriftart, Ehrfürchtig, Symbolauswahl. Und dann ist das nicht der 101. Es ist kein Icon-Peaker. Lass es mich nochmal versuchen. Also entferne ich nur den Zielort. Lassen Sie mich eigentlich einfach beraten und von vorne anfangen. Fügen Sie also eine clientseitige Bibliothek hinzu. Ich gebe einfach Schriftart ein, und da ist es, Font-Bindestrich, Awesome. Das will ich. Wenn wir darauf klicken, werden Sie sehen denen sagen, dass wir es an der Zielposition von dub, dub, dub route slash font platzieren werden . Großartig. Aber ich möchte, dass alle meine Bibliotheken von Drittanbietern am selben Ort organisiert sind. Stattdessen sage ich dub, dub, dub route slash, LIB Slash Font. Genial, da will ich. Aber das sind alle Akten , die wir bekommen werden. Und ich werde nichts davon ändern. Ich wähle bestimmte Dateien aus. Ich gehe einfach weiter und klicke auf Installieren. Und dann lädt es das für mich erforderliche herunter und fügt es dem von mir angegebenen Ordner hinzu. Da ist es, Font Awesome. Wir haben auch eine zusätzliche Datei in Form dieses Lindeman-Punkt-JSON erhalten, was im Grunde nur auffällig ist, um zu sagen dass dies die Bibliotheken sind, die Sie dem Client-Bibliotheksmanager installiert haben. Okay, das sieht bisher gut aus. Wissen Sie, was ich tun muss, ist das gesamte Layout wissen zu lassen , dass es auch Font Awesome Ressourcen enthalten sollte. Im Kopfbereich, wo ich alle meine Stylesheets direkt über den Bootstrap lege. Ich habe das Stylesheet für die Schrift eingelegt. Auch. Wo bekomme ich dieses Stylesheet? Es befindet sich im lib-Ordner, Font Awesome Ordner, CSS-Ordner. Und dann wirst du sehen, dass alles Punkt Min irgendwie Zusammenbruch der Schulden ist. Anstatt also alles zu verwenden, verwenden wir die minimierte Version. Wir haben bereits den Unterschied zwischen der einen Version und der Minified besprochen , richtig, also machen wir das einfach. Also fügen wir diese Akte genau dort ein. Mit dieser Einbeziehung kann ich Nein, schauen Sie sich an, wie ich meine Icons verwenden kann. Wenn ich zurück zur Website gehe und mir die Beispiele anschaue, dann zeigt es mir die Syntax aussieht und es ist wirklich einfach. Alles was wir brauchen ist ein I-Tag und dann eine Klasse mit FA. Und dann wenn ein Strich, welches Symbol es ist , nach dem wir suchen. Wir haben gesagt, wir wollten wie einen Müll für das Löschen. An. Hier ist ein praktisches Beispiel. Sie haben das Anker-Tag und sie haben das Anker-Tag nicht eingerichtet, Sie haben dieses Symbol. Was auch immer das braucht, hier bekommst du das Host-Symbol neben zu Hause. Das Buch haben wir gesagt Bibliothek usw. So können Sie sehr kreativ sein und diese Icons nach Belieben verwenden. Also hier ist etwas Praktisches, das wir hier sehen, dass wir den Mülleimer haben. Wie bekomme ich den Mülleimer? Okay, es ist Müll. Also leihe ich mir das einfach aus. Springe zu unserem Code. Dann möchte ich in der Löschtaste anstelle des Wortes Löschen nur das Icon für den Papierkorb. Zum Bearbeiten. Vielleicht will ich nur und lass mich sehen, was das Zeugnis ist. Also denke ich, wenn ich mich nicht irre, wird die Intelligenz tatsächlich anfangen, Optionen auszufüllen , basierend auf der Tatsache , dass wir das CSS aufgenommen haben. Was ist, wenn ich ein Buch zum Bearbeiten wollte? Mal sehen, ob es eine Bearbeitung gibt. Editieren. Es gibt explizit einen zum Bearbeiten. Und dann können wir für Details wahrscheinlich etwas verwenden wie lass mich sehen ob es etwas für Details gibt. Nein, dann können wir Bulk oder ein altes Buch Dash Open verwenden . Da sind wir los. Manchmal kann man, man müsste sich hinsetzen und eher die verschiedenen Icon-Ideen oder die Optionen erkunden . Und dann erfinden Sie Ihre eigenen basierend auf dem , was Sie dem Benutzer vermitteln möchten. Also werde ich mir das einfach schnell ansehen. Wenn wir einen Blick darauf werfen, sehen wir das, okay, das sieht wie eine Bearbeitung aus. Dies ist ein offenes Buch. Ich halte fest. Mein Benutzer würde schließen, dass dies die Details sind , schauen Sie sich mehr an und dann wird das Papierkorb-Symbol nicht angezeigt. Wenn ich also wieder rüberspringe, manchmal auch basierend auf der Version der Schriftart Awesome Datei, die Sie verwenden, bestimmte Felder funktionieren bestimmte Klassen möglicherweise nicht. Also wie Trash Dot Dash oder funktioniert vielleicht nicht, aber hat meine Arbeit zerstört. Lassen Sie mich diese Änderung einfach aktualisieren. Und da sind wir los. Wir lassen unseren Mülleimer also viel besser aussehen. Ich zeige Ihnen nur , dass Sie auf diese Weise aufpeppen können, wie Ihre Displays sind wenn Sie sich nicht nur auf die Icons verlassen möchten, denn nicht jeder könnte einfach schließen, was wir haben möchte sie nur von den Symbolen aus und Sie können immer das Textsymbol bearbeiten und dann das Wort Details bearbeiten und löschen. Lassen Sie sich nicht sagen, dass es nicht sehr benutzerfreundlich war, weil Sie nicht wussten, was die Icons MIT Boulder am wenigsten das kleine Flair vermittelt. Also auch für den Create Button, den Link zum Erstellen, kopiere ich lieber nur den ich tagge. Und dann wird dadurch ein neuer Bot erstellt. Dann oben werde ich sehen, gibt es ein Pluszeichen? Es gibt ein Pluszeichen. Wenn also ein Strich plus aktualisiert wird, sehen wir das plus Anmeldezeiträume. So können Sie damit beginnen , den Korrupter für Ihre Anzeige Ihrer Anwendung mithilfe dieser Bibliotheken von Drittanbietern herauszuholen Ihre Anzeige Ihrer Anwendung mithilfe dieser Bibliotheken von . Du kannst es durchziehen. Fordern Sie Sie heraus, diese Seiten neu zu gestalten, setzen Sie mich auf die Höhe, um ein bisschen robuster im Detail aufzulisten . Sie ist die Redakteurin und der Dollar, den wir hier auflisten müssen, und wir müssen bereits tun, was es tun muss. Du kannst weitermachen und das machen. Ich hoffe also , dass Sie sich dieser Herausforderung gestellt haben und dass Sie weitergemacht haben und etwas Kreativität auf die anderen Seiten angewendet haben. Aber ich zeige dir, was ich getan habe. Und so können wir Notizen zur Bearbeitung vergleichen. Alles was ich getan habe, war, dies wieder zur Liste hinzuzufügen. Beachten Sie nun, dass diese oben genannte Liste ist, es sich um eine mit einer Primärspule oder beidem geschlagen hat. Es sieht nur so aus, wenn ich den Mauszeiger darüber fahre. Dies wurde leicht durch die Verwendung von BTA und Strichlinie, Dash Primär, erreicht . Für alle Seiten, die den Dollar hatten , um den Link unten aufzulisten, habe ich ihn aus dem DV verschoben, ihn in das gleiche div wie die Schaltfläche „Senden“ gelegt und ihm dann den BTN geben, btn skizzieren primär. Und alles andere blieb intakt, aber ich gab es Pfeilsymbol nach links. Schon damals habe ich hier eine Gelegenheit mit dem Input verpasst. Die Eingabe wurde also nicht in dieses Symbol gesetzt. In der Eingabe. Die Schaltfläche „Speichern“ ist nur eine Eingabe ist kein Button-Tag, es ist nur ein Eingabe-Tag. Wenn ich etwas einsetzen wollte, um zu sagen, dass es gespeichert ist und ich die Eingabe nicht verwenden könnte. Was ich tun müsste, ist den Button zu benutzen. Ich bin gekommen, um Ihnen zu zeigen, was ich getan habe, und ich merke, dass ich, wenn ich mehr Raum für Verbesserungen hätte , diesen Button treffen und Ihnen die Klassen-Btn geben kann . Und dann können Knöpfe einen Typ annehmen. Und dieser wäre ein Absenden-Button. Das ist in Ordnung. Aber dann für sein Icon, Mal sehen, welches Symbol ich hier benutzen könnte. Wenn ja, gibt es ein Save, okay, wenn ich speichere und ich denke , das wird uns diese Diskette geben , dieses aussehende Symbol. Nachdem ich diese Änderungen vorgenommen habe, endet ich mit dieser Schaltfläche zum Speichern im Vergleich zu den Eingängen. Ich zeige Ihnen also nur, wie Sie verschiedene Tags verwenden können , um die gleiche Funktionalität zu erreichen. Jetzt kann ich dieses Eingabe-Tag oder diese Eingabe entfernen. Ja und nein. Ich habe nur dieses Speichern mit dem Icon oder oben zum Auflisten. Wieder einmal wird diese kleine Hover-Animation nur durch fehlende BTN, Gliederungsstrich erreicht , und dann haben Sie die gleiche primäre Warnung, Gefahr usw. Ich war in einem Prozess. Ich sehe Sie auf jeder Seite , die den Link zum Auflisten hatte, alles, was ich getan habe, war, sie in dieselbe Formulargruppe wie die Schaltfläche für die Einreichung zu verschieben . Das ist also die Update-Seite auf dem Erstellen. Ich habe das Gleiche gemacht, damit ich die gleiche Art von Änderung hier mit der Schaltfläche Erstellen treffen kann . Ich mache das einfach, während wir alle hier suchen. Nehmen Sie diese Schaltfläche und das ist fast so einfach kopieren NPS wird nur der Unterschied sein, dass dies primär wäre. Oder ich kann es zu etwas anderem wie Erfolg machen , weil es ein Create ist, also ist es Erfolg, Erstellen. Und dann kann es auch das Speichersymbol haben. Ich könnte sehen, ob es noch etwas gibt, das ich gebrauchen könnte. Ich kann mir in diesem Moment nichts anderes einfallen, also lasse ich es einfach mit dem Speichern, der Create Page. Clip hoch, um zwei aufzulisten, und ich klicke auf Neu erstellen, ich bekomme diesen grünen Button. Das Geld zum Auflisten. Okay, dann für meine Detailseite, auf der ich die Bearbeitung hatte, und zurück zu List dieselben Prinzipien. Dies ist also die gleiche Schaltfläche, die von der Indexseite für den Bearbeiten kommt . Und dann ist dies die gleiche Bucket-Liste , die wir verwendet haben. Nein, es gibt einen kleinen syntaktischen Unterschied in der Detailsprache bei der die ASP-Dash-Route-ID natürlich model.py Auto-Punkt-ID lautet. Das ist also ein Unterschied zwischen dem, was gewesen wäre und was ich eingeben musste, was auf der Indexseite war , anstatt dem, was auf dieser Seite sein muss. Ansonsten. Jetzt beginnen wir zu sehen, wie wir unserer Anwendung noch einmal einen kleinen Charakter verleihen können . Jetzt, da wir wissen, wie man Bibliotheken von Drittanbietern integriert, werden wir als letztes Sweet Alerts verwenden , um die Bestätigung für das Löschen anstelle des Standard-Java-Skripts zu behandeln das Löschen anstelle des Standard-Java-Skripts auffordern, dass wir gerade verwenden. Schritt Nummer eins, lassen Sie uns unsere Sweet Alerts Library finden. erneut mit der rechten Maustaste auf www root und fügen Sie clientseitige Bibliothek hinzu. Und ich gebe einfach süße Warnungen ein, da es auftaucht. Ich werde einfach weitermachen und das einbeziehen. Und dann ändere ich noch einmal den Standort. Ich wollte dub, dub, dub oder root slash lib slash sweet alert. Fahren Sie fort und klicken Sie auf Installieren. Es wird aktualisiert oder Bibliotheksmanager oder eine lib man-Datei. Jetzt wissen wir, welche zusätzliche Bibliothek hinzugefügt wurde, aber wir bekommen auch die Dateien oder die Datei zum Projekt hinzugefügt. Wisse, dass das vorhanden ist. Springen wir zu unserer Layoutdatei und fügen das Skript ein. Also der Grund, warum wir es in das Layout aufnehmen und nicht in die Seite oder, wissen Sie, wo genau das, wenn wir es an mehreren Stellen wollen, dann müssten Sie diese Aufnahme überall wiederholen, was ich nicht unbedingt will. Also werde ich nur die Bedrohung über dem Site-GIS aufnehmen. Ich füge einfach das Skripttag hinzu, bei dem der SRC gleich ist. Ich weiß, dass es im Alarmschrägstrich von Lib Slash ist. All das war durch Intelligenz unten. Nett und sauber. Das heißt, nein, wir können von überall in unserer Anwendung auf diese süße Alert-Bibliothek zugreifen von überall in unserer Anwendung auf diese süße Alert-Bibliothek . Vielleicht möchten Sie es auf verschiedenen Seiten haben. Wenn Sie verschiedene Indexdateien haben, möchten Sie die gleiche Art von Löschfunktion haben. Du kannst es, du kannst es überall machen. Wenn ich zurück zu meiner Indexseite gehe, muss ich einen Abschnitt für Skripte einrichten. Dies ist etwas, das wir bereits gesehen denn auf unserer Create-Seite war es ihr Abschnitt für Skripte. Lassen Sie mich Ihnen also einen Hintergrund geben, dem ich ihn hervorheben kann. Okay, wir wollten die Skripte einbeziehen und so weiter, aber ich habe nicht ganz erklärt, warum der Abschnitt da ist und wir haben nicht nur die Skripte eingeschlossen. Wenn Sie zu unserer alten Alle-Seite zurückkehren, Sie feststellen, dass Sie verschiedene Abschnitte haben, sodass Sie den View-Datentyp haben. Wir haben bereits festgestellt, wofür das da ist. Wir haben auch den Render-Text. Wir haben bereits festgestellt, dass dort der gesamte Inhalt in unseren Ansichten später innerhalb des gerendert wird gesamten Layouts gerendert wird, nicht, Sie werden sehen, dass Sie auch einen Abschnitt haben, sagt render Abschnitt namens Scripts, und es ist nicht erforderlich. Dies ermöglicht, dass wir, wann immer wir ein Skript einfügen möchten, Abschnitt aufrufen können, indem wir das benutzerdefinierte JavaScript-jQuery-Skript oder was auch immer es ist. Und wenn die Seite auf einem ganzen rendert wird , würde dieser Skriptbereich unter allem anderen oder relativ zu seiner Position im Leo-Stück gerendert , dort wird er gerendert. Dies ist wichtig, denn denken Sie daran, dass ich über Abhängigkeiten spreche. Jquery dann hat Bootstrap eine Abhängigkeit von jQuery. Das bedeutet, dass ich die Bootstrap-Inklusion oder die Schriftreferenz nicht über jQuery stellen kann , da was Bootstrap tun muss , nicht verfügbar ist, da jQuery nicht verfügbar war. Genau wie mit dem süßen Alarm. Ich kann es nicht als süße Warnung bezeichnen, wenn ich die Sweet Alert Library nicht bereits verfügbar habe die Sweet Alert Library nicht bereits , wenn ich meinen Code schreibe. Wir müssen zwar sicherstellen, dass wir alle unsere Skripte haben, die auf der ganzen Linie benötigt werden, alles in unserem Layout und dann in unseren Ansichten, wenn wir ein Skript oder ein benutzerdefiniertes anderes Skript benötigen, wir stellen sicher, dass es in den Abschnitt eingefügt wird. Sie zu einem der bestehenden Foren zurückkehren, ist es sinnvoll, die Validierungsskripte durchzuführen , dass Validierungsskripte beide jQuery-bezogene Bibliotheken sind . Wir rufen jQuery-Funktionalität bevor die jQuery-Datei existiert. Es wird in diesen Abschnitt so gesetzt, dass wenn die gesamte Layoutseite mit allen Skripten und dem Roman gerendert wird und so weiter. Jquery ist bereits auf der Seite. Wenn das Formular geladen wird, werden die jQuery-Validierungsskripte nach der jQuery geladen. In unserem Fall möchten wir sicherstellen, dass wir unseren süßen Warncode aufrufen, nachdem sich die Sweet Alert-Bibliotheken nicht in einem Pitch im Science-Bereich befinden , zu dem ich gegangen bin. Siehst du, ich wollte den Script-Bereich öffnen und schließen. Dann kann ich hier anfangen, mein eigenes benutzerdefiniertes JavaScript oder jQuery zu schreiben oder was auch immer ich will. In diesem Fall brauche ich ein jQuery-Ereignis, auf das ich achten , wann das Formular gesendet wird. Alles klar, also lasst uns das zusammen lesen. Mal sehen, ob es funktioniert, aber ich werde dich einfach durch das führen, was ich tue , und wir können es reparieren, während wir weitermachen. Also Dollarzeichen, wir verwenden jQuery. Also kann ich den jQuery-Code erst verwenden, wenn die jQuery-Bibliothek bereits existiert und aufgerufen wurde. Ich gehe nur zum C-Dollar-Zeichen. Setzen Sie diese Funktion Punkt globale Funktion open and close ein, Klammer Semikolon. Und dann innerhalb dieser Funktion oder ich kann anfangen, meinen benutzerdefinierten Code zu schreiben. Also Dollarzeichen, und ich suche nach einer Formularübermittlung. Also sage ich einfach das Formular „Senden“. Bei einer Formularübermittlung wollen wir also das Telefon Shun. Und ich gab Ihnen zwei einen Parameter namens E. Also ist E genau wie ein Ereignisargument, um zu sehen, nun, ich repräsentiere das Ereignis, das bald passieren wird. Sie versuchen also, das Formular einzureichen. E hat die Informationen für alles, was passieren wird. Das erste, was ich tun wollte, ist es zu sagen E dot default verhindert, da der Standardvorgang einer Formularübermittlung das Senden ist. Ich wollte das pausieren, weil ich gleich fragen werde: Bist du sicher? Alles klar. Der Button erinnert sich also daran, dass wir dieses ungeklickte Zeug mit den süßen Warnungen erfreuen. Sie klicken also auf die Schaltfläche, ich möchte das Standardverhalten der Formularübermittlung pausieren . Und dann werde ich Swale sehen, was meine süßen Warnungen sind, während es kurz für süße Warnungen ist. Statt dieser offenen Klammern. Und dann werde ich in JavaScripts der Codehinweis nicht so mächtig wie HTML und CSS und C-Sharp. Was ich versucht habe, ist, wenn ich etwas öffne, das gleichzeitig schließt und das Semikolon platziere , damit ich es später nicht vergesse. Swale braucht ein paar Argumente und wenn Sie möchten, können Sie die Sweet Alert-Dokumentation nachschlagen. Es ist immer gut, sich das Dokument anzusehen. Also wenn du dir nicht sicher bist, aber im Moment mache ich einfach weiter und wir schauen es uns einfach hier an. Also bin ich zu sehen gegangen, bist du sicher? Dies ist der Titel der Aufforderung? Como? Dann haben wir den Text, der die eigentliche Botschaft sein wird die die Person sehen wird, was ich als das sehen werde, was wir zuvor hatten. Sind Sie sicher, dass Sie diesen Datensatz löschen möchten ? Ich werde das Symbol sehen. Icon ist Warnung, also weiß es, dass dies ein sehr ernster Moment ist. Ich werde sagen, Knöpfe sind gleich wahr. So süße Warnungen können wirklich wie ein Pop-up sein, um zu sagen, okay, das ist passiert. Sie klicken es aus und sagen: okay, wenn Sie Schaltflächen sagen, werden Sie jedoch standardmäßig die Archaea geben und eine Art Aufforderung abbrechen, wie wir mit dem onclick gesehen haben. Dann sehen wir auch, dass ein Gefahrenmodus wahr ist. Beachten Sie, dass jede Zeile mit einem Komma endet , da dies wie ein Gebäude oder für das gesamte Objekt ist . Beachten Sie, dass wir das süße Alarmobjekt haben, das Bill gesagt hat, dass wir weiter sehen müssen. Dann. Der damalige Teil wird wie ein Delegiertennotiz sein, um auf die Eingabe des Benutzers zu achten. Die Eingaben werden in jeder Variablen gespeichert, die wir einsetzen. Also bestätige. Ich sehe dann schau darauf, dass es bestätigt wird. Wenn ich auf Okay klicke. Bestätigen Sie, dass stimmt. Wenn ich klicke, dann bestätigte Abbrechen seine falsche. Das ist so ziemlich genau das, was es ist. Und wir machen die gleiche Art von Lambda-Ausdruck darin. Dies ist also eine Delegiertenfunktion, bei der wir nur eine Funktion im laufenden Betrieb machen, um zu sehen, dass die Dysfunktion gegen die Variable bestätigt wird. Ich sehe, ob ich bestätige. Was wollen wir tun, wenn wir bestätigt werden. Wenn also confirm im Grunde sieht, ob dieser Wert wahr ist, wenn sie sagen: Okay, was wollen wir dann tun? Was möchte ich machen? Wenn sie sagten, sie bestätigen, dann wollte ich diesen Punkt einreichen. Ich pausiere das Standardverhalten, aber dann sehe ich, okay, nun, mach weiter und sende mich ab. Wenn sie ja sagen, lassen Sie uns dies für einen Dreh angeben. In Ordnung, also habe ich einige zusätzliche Datensätze hinzugefügt , damit wir testen können. Also werde ich einfach löschen und oh, Snap sagen, ich habe die ursprüngliche Eingabeaufforderung nicht entfernt, aber lass mich einfach auf OK klicken und fortfahren. Und dann siehst du, hier ist unsere Suites Alarm. Sieh mal, oh, nett. Das sieht aus. Bist du sicher, dass diese nette kleine Ikone? Lass dich einfach wissen, hey, Gefahr voraus. Sind Sie sicher, dass Sie diesen Datensatz löschen möchten ? Wenn ich auf Okay klicke. Okay, es ist immer noch eine Aufforderung, also müssen wir es etwas mehr Spaß machen, damit ich genau weiß, was passiert. Was passiert ist, weil jede dieser Löschschaltflächen ein Formular ist. Wenn Sie auf Löschen klicken , werden alle Formulare angezeigt, die Seite. Und deshalb wird diese Aufforderung mehrfach angezeigt. Also kein Problem, wir untersuchen, was nötig ist damit dieses Ding richtig funktioniert. Also zuerst, Nachbar bewege das aufKlick. Jetzt, da wir die süßen Warnungen haben, benötigen wir keine Eingabeaufforderung des Browsers. Wir wissen, dass es eine nette, sauberere Oberfläche gibt, um eine alternative Methode zum Drucken von Formularen pro Vorlesung zu verwenden , von der ich sehe, dass das Ausdrucken Formularen für jede einzelne Schaltfläche schwierig wäre. Und dann schauen wir bitte auf den Knopf zu. Ich zeige dir nur alle deine Möglichkeiten. Wir haben also gesehen, dass dies die Standard-Eingabeaufforderung funktioniert, und wenn Sie damit vertraut sind, kein Problem. Aber manchmal, wenn Sie anfangen in anderen Bibliotheken zu arbeiten, müssen Sie auf dem Weg mit Ihrem gesamten Design Kompromisse eingehen. In Ordnung. Lassen Sie uns daran arbeiten, unser Wissen darüber zu kombinieren , wie Formulare in der Warteschleife funktionieren Die Veröffentlichung funktioniert mit allen Daten, die gespeichert werden müssen , bevor die Einreichung erfolgen kann. Was ich tun möchte, ist eine Instanz der Farm zu erstellen , anstatt drei Datensätze und drei verschiedene Foren zu haben. Ich möchte ja haben, Mini-Löschschaltflächen, wie viele Löschschaltflächen sagen, es gibt Datensätze, aber wir verwenden ein Formular, um den Befehl delete a auszuführen. Ich nehme dieses Formular an und lege es von selbst unter den Tisch. Also schneide ich nur die Formular-Tags aus und setze sie selbst ein. Ich bin gegangen, um das ist eine B-Root-Auto-ID zu entfernen. Und stattdessen gebe ich ihm einen Input, genau wie das, was wir im Ursprung oder Löschen gesehen haben. In der Originalität Bleiform. Wir hatten eine Form am unteren Rand des Spielfelds. Wir hatten das versteckt, also kopiere ich das einfach, damit wir einen Bezugspunkt haben. Eingabetyp ist ausgeblendet, bevor wir keine Eigenschaft oder irgendetwas im Modell namens Auto haben. Ich kann stattdessen keine Auto-ID für den ASP sehen, ich gebe ihm einfach einen Namen. Der Name hier ist Auto-ID. Was ist die Relevanz des Namens? Wann haben wir ein Formular? Irgendeine Form? Denken Sie daran, dass wir, als wir die grundlegende HTML-Seite gemacht haben, den Namen verdoppelt haben und aufgrund des Namens das Zeug in der URL gesehen hat. Es ist das gleiche Prinzip, außer dass ASP dash four sich um Namen und ID für o kümmert. Sie werden also feststellen, dass unsere Eingabe-Tags hier, wir mussten das Knie nicht sehen, ausreichen würden, um es zu sehen, alles was wir sehen müssen Wenn Sie die Klasse und den ASP-Bindestrich für Bone did Tool festlegen , der Eigenschaftsname für wäre der Eigenschaftsname für den Modellnamen der Ersatz für ASP-Dash Four. Was also wirklich und wirklich ausgedruckt wird ist ID gleich Autopunktname, Name ist gleich Auto-Punktname. Wir können manuell unser eigenes Tag angeben, seinen eigenen Namen, mit derselben Routen-ID übereinstimmt der mit derselben Routen-ID übereinstimmt, die wir hatten, oder demselben Routenparameter, den die Post-Methode tatsächlich wartet, um die Auto-ID hier zu sehen. Auto-Ideen und ich gebe Ihnen auch die ID, die Auto-ID, damit wir über die jQuery darauf zugreifen können. Das ist also unsere Form. Es braucht nicht einmal einen Sende-Button , da wir den Button hier haben. Wir müssen jedoch die ID der Schaltfläche kennen, auf die geklickt wird. Also füge ich einfach ein weiteres Datenattribut hinzu. Wieder einmal untersuchen wir nur alle Kompromisse und all die schönen coolen Dinge , die wir einsetzen können. Es gibt ein Attribut , das wir auf die Schaltfläche namens Data Dash ID setzen können . Und dann können wir Ihnen den gleichen Wert des Artikels geben, Punkt-ID. Wissen Sie, dass die Links ihre IDs haben und jede Schaltfläche , die sich als Sende-Button verdoppeln wird, hat eine eigene ID. Nein, wir müssen auf einen Button-Klick anstelle einer Formularclique achten . Dafür kann ich leicht sagen, gib dieser eine benutzerdefinierte Klasse, lösche btn. Jeder Lösch-Button wird also in meiner jQuery als delete btn identifiziert. Anstatt auf eine ganze Formularübermittlung zu achten, kann ich wissen, dass Dot Delete btn sagen. Achten Sie also auf ein Klickereignis für jedes Element, das die Klasse delete btn hat. Du siehst also, wie das alles zusammenkommen wird. Wann immer darauf geklickt wird, gibt es keinen Standardwert. Ich muss Standardwerte nicht verhindern, also werde ich das einfach entfernen. Zeigt dir noch einmal den Kontext. Warum schreiben wir den Code unter den verschiedenen Umständen? Es gibt also kein Formular, das es einreichen kann. Ich muss das Standardverhalten nicht durch einen Löschklick verhindern . Was ich jedoch tun muss, ist prompt, was immer noch passieren wird. Wenn sie dann bestätigen, was ich tun werde, ist und ich muss diesen Ausweis geben , damit ich ihn identifizieren kann. Jedes Mal, wenn wir ein Element in JavaScript oder jQuery identifizieren müssen , können wir die Klasse verwenden oder die ID verwenden. Das ist also das Löschformular. Ich werde sehen , dass der Wert, den die Eingabe erhalten soll, von der Daten-ID der Schaltfläche stammen sollte , auf die geklickt wurde. Lassen Sie mich das alles Schritt für Schritt machen. Zuerst holen wir uns die Knöpfe. Ich kann also sagen, dass var btn gleich dem Dollarzeichen ist. Dies. Das sage ich , dass dies das Element ist. Dies ist ein Objekt , das alle Elemente darstellt, die das Ereignis ausgelöst haben. Das ist Schritt Nummer eins, Tool. Var id ist gleich und dann kann ich die ID aus den BTN-Punktdaten abrufen. Der Grund, warum ich Daten-Dash-IDs verwendet habe, die tatsächlich abfragen, können Sie leicht an dieses Datenelement binden und diesen Schlüssel erhalten. Holen Sie sich den Wert basierend auf dem Schlüssel. Ich sehe BTN-Punktdaten und bekomme mir dann den Wert , der mit der Schlüssel-ID gespeichert wird. Und jetzt haben wir die ID oder Auto-ID, die einer Schaltfläche entspricht, auf die geklickt wurde. Wisse, nachdem ich all das habe, habe ich den Wert der versteckten Elemente festgelegt. Also unterzeichnen Dollar Anführungszeichen, Hashtag und seinen Auto-ID-Punkt val. Und dann gebe ich dir einfach den Ausweis. Wissen Sie, dass der Wert dieses Versteckten auf die ID auf der Löschschaltfläche festgelegt wird . Dann, nachdem ich all das gemacht habe, kann ich jetzt Dollarzeichen Hashtag sehen, Formular löschen. Sie verwenden den Hashtag für ID genau wie bei CSS, Dot Full Class Hashtag oder Pfund oder der Zahl, die für IDs sagt. Also gehe ich nach dem Löschformular nach ID, bis es weitergeht und abgeschickt wird. Gehen Sie fort und führen Sie Ihr Standardverhalten nachdem ich Ihre Daten für Sie eingerichtet habe. Lassen Sie uns also diese Version nennen, diese Version davon für einen Dreh. Wir können klicken, Löschen, wir erhalten unsere Aufforderung, wir klicken auf OK und schauen uns das an. Es funktioniert, oder? Alles, was wir getan haben, war im Hintergrund. einmal haben wir ein Formular-Tag erstellt. Selbst wenn Sie das Element untersuchen, bemerken Sie dies unten in der Tabelle. Also haben wir Leiche und lassen mich ins Div gehen, das ist ein Container. Und dann haben wir die Tabelle und dann haben wir unser Formular C. Es unterscheidet sich nicht auf der Seite. Es scheint nicht, dass wir auffällig waren als es an jede Schaltfläche angehängt wurde, aber nein, es ist nur eine Form auf der Seite, also gibt es keine Verwirrung darüber, auf welches Formular geklickt wird, welche -Button, der für mich versucht, eingereicht zu werden. Es gibt keine Verwirrung mehr. Es gibt nur ein Formular. Und wenn Sie sich dann jede Schaltfläche ansehen, sehen Sie, dass die Daten-Dash-ID die ID enthält, die allen anderen Links entspricht . Das ist also ID Fünf. Wenn darauf geklickt wird, erhalten wir den Button , auf den geklickt wurde. Wir bekommen die ID. Dann setzen wir das auf das versteckte Element. Dann gehen wir weiter und unterwerfen uns. Und dann weiß das Formular, dass es mit einer Methode von Beiträgen zum Delete-Handler gehen sollte mit einer Methode von Beiträgen zum Delete-Handler gehen , und es übergibt den versteckten Wert namens Car ID. Sobald dies alles vorhanden ist, klicken Sie auf das Löschen nach dem Löschen mit der zu erwartenden Routen-ID. Und was wir wissen, dass es all das tun soll, all diese Verbesserungen, wenn wir Bibliotheken von Drittanbietern einsetzen und sie verwenden möchten, wissen Sie, wir müssen diese Art von Design verwenden Entscheidungen, wenn wir weitermachen weil Sie denken , dass es funktioniert oder in einer bestimmten Situation funktionieren könnte . Wenn Sie dann jedoch anderen Code und Bibliotheken hinzufügen, müssen Sie möglicherweise noch mehr Spaß machen. Ändern Sie einfach Ihren Code-Refaktor, während Sie weitermachen. Das war's also für diese Aktivität. Wir sehen uns in der nächsten Lektion. 15. Änderungen in GitHub hinzufügen: Alles klar Leute, willkommen zurück. Diese Lektion wird kurz sein. Alles, was wir in diesem Fall tun werden, ist die Überprüfung der Bestelländerungen. Also haben wir angefangen, GitHub zu benutzen, irgendwann wissen. Und was wir getan haben, war, unsere Initiale einzuchecken, als wir einen bestimmten Meilenstein erreicht haben, haben wir alle unsere Änderungen überprüft. wollten wir noch einmal machen. Rote Häkchen weisen auf ausstehende Dateien , Änderungen oder Bearbeitungen hin. Die grünen Plusse repräsentieren diejenigen, die geändert wurden, und die blauen Vorhängeschlösser stellen im Grunde diejenigen dar, die sich nicht geändert haben. Alles, was wir tun müssen, ist, um Änderungen zu bekommen. Wenn Sie nicht sehen, wo es sich auf meinem Bildschirm befindet, können Sie jederzeit zu Ansicht gehen und auf Änderungen abrufen klicken. Dann zeigt Ihnen dieses Paket jede einzelne Datei, die solo für Bibliotheken von Drittanbietern hinzugefügt wurde , die wir hinzugefügt haben, alle vorhanden sind. Und unsere Migrationsdatei und/oder Entitätsdateien. Also werde ich nur eine kurze Nachricht geben. Obwohl die Nachricht kein Aufsatz sein muss, bin ich normalerweise gerne so beschreibend wie möglich in meiner Nachricht, damit jeder, sie liest, den Kern dessen bekommt, was ich in dieser Version mache, Commit. Danach kann ich einfach sagen alles verpflichten und sinken. Sobald diese Gamete erfolgreich abgeschlossen wurde, wird diese Nachricht angezeigt. Und wenn wir dann zum Solution Explorer zurückkehren, hätte alles blaue Vorhängeschlösser. Wenn wir wiederkommen, werden wir anfangen unsere Bewerbung etwas weiter zu erweitern. 16. Datenbankänderungen mit Entity Framework verwalten: In dieser Lektion werden wir unsere anderen Entitäten für diese Anwendung einrichten . Jetzt haben wir also Auto, was wichtig ist. Alles, was wir für das Auto haben, wäre das Jahr und der Name des Autos. Wissen Sie, ob Sie lange genug mit Autos zusammen sind, wissen Sie, dass es nicht nur eine Namenskarten ist, die eine Kombination aus sanftmütigen und einem Modell haben , oder? Die Sanftmütigen wären also die Marke des Autos wie Nissan oder Lamborghini. Und das Modell würde nachempfunden, haben wir es zu tun? Was wir tun wollen, ist hier einige Datenbankänderungen vorzunehmen. Und was wir opfern müssen ist Name und Aufteilung in Marke und Modell. An dieser Stelle wollten Sie einige Designüberlegungen machen , da es leicht zu sehen ist. Okay, ich wollte das für mich ändern und wir werden das einfach duplizieren und dieses Modell treffen. Und es wird einfach genug sein , nur eine Zeichenfolge zu haben. Aber dann bedenken Sie dies, wenn jemand ein Auto in Ihr System einsteigt, möchten Sie unbedingt die Milch eintippt und das Modell eintippt? Was ist, wenn Sie zwei von Mekka und Modellfahrzeugen derselben Art haben? Was willst du, dass sie jedes Mal das Wort Suzuki eingeben ? Denn dann vielleicht die Urlaubsabstimmung oder der Fehler, einer der SAT erzielt es oder umgekehrt. Der Punkt ist, dass Sie zu diesem Zeitpunkt die Möglichkeit menschlicher Fehler einschränken möchten , wenn Daten über unsere Benutzeroberfläche entnehmen. Dies ist zwar keine Entscheidung über die Benutzeroberfläche, was wir hier tun, beeinflusst das Design oder die Benutzeroberfläche. Im Allgemeinen verwenden Sie in einem Formular , in dem Daten wiederholt werden müssen, eine Dropdown-Liste, was bedeutet, dass Sie eine Dropdown-Liste mit allen potenziellen Optionen haben . Sie würden es dem normalen Benutzer nicht überlassen einfach sagen zu können, oh, hier ist der Wert und geben Sie ihn einfach manuell ein. Für mich kann ich modellieren, fühle ich mich wohler oder zumindest für MEK, was die Marken wären , weil das saurer ist als das Modell, weil verschiedene Marken verschiedener Modelle und Kombinationen 0, damit sie das Modell eingeben können, aber für das Mikrofon persönlich ein paar komfortabler, um ihnen eine Liste der potenziellen Marken zu geben . Wenn es nicht in der Liste enthalten ist, können wir es zur Liste hinzufügen, aber es ist besser, dass sie diese Liste haben. Und sie können das Modell relativ zu dem eingeben , was sie aus der Liste ausgewählt haben. Das wird uns zwingen, einige wichtige Datenbankänderungen vorzunehmen. Denn wenn ich eine Liste von Mikrofonen brauche, kann ich keine String-Meet sehen. Was wir jetzt anfangen, darüber zu sprechen, was wir Fremdschlüssel und Primärschlüssel nennen. Wir wissen also bereits, dass beide Primärschlüssel sind. Alles klar, aber jetzt brauchen wir eine andere Tabelle und wir brauchen einen Fremdschlüssel für diese Tabelle im Auto. Lassen Sie uns also diese neue Tabelle erstellen. Also Migrationen, tut mir leid, nichts Migrationen im Datenprojekt eher, ich habe eine neue Klasse hinzugefügt, und ich nenne diese Klasse mich das Mikrofon. Denken Sie daran, dass diese Gläser nur Modelle sind, für die ein Tisch mit einem Schwanz auf den Eigenschaften geplant wird , für die wir unsere Spannung speichern wollten. Was würden wir also beide Sanftmütigen aufbewahren wollen ? Erstens haben wir immer unsere öffentliche int id. Dann hätten wir den Namen Prop, Top Tub, String-Namen. Name bedeutet hier nur Name wie in dem Zeichenfolgenwert, der für den Mittelwert in der Tabelle namens mic verwendet wird. Make Nummer eins könnte Nissan sein, machen Nummer zwei könnte Toyota sein usw. Das ist also wirklich das, was der Name hier darstellt. Wenn du „Make mich persönlich“ sagen willst, folge ich dieser Namenskonvention nicht. Manche Leute tun es. tue ich nicht, weil ich bereits in der Tabelle namens mic bin, also muss ich meinen Namen nicht sehen , Name wäre der Name des Wertes, den ich in diese Tabelle lege, oder? Jetzt haben wir den Haupttabelle, es ist in Ordnung. Ich muss den Datenbankkontexten mitteilen , dass es eine neue Tabelle im Ton gibt. Ich bin gerade zu dieser Zeile Control D gegangen nur um die harten Teile zu duplizieren. Aber ich wollte diesen Mix nennen. Ich könnte dieses Auto auch nennen, es spielt keine Rolle, wie ich den Tisch nenne. Aber ich stehe sehr gerne mit dem Namen der Entität und dem Namen des Tisches überein, da man ihn nicht mit Auto und Autos sieht. Aber wieder einmal, du magst vielleicht nicht unbedingt meine Namenskonvention und du willst, obwohl eine, dann kein Problem, wenn du dieses Auto-Mikrofon und Auto-Mix benennen willst dieses Auto-Mikrofon und Auto-Mix oder du die Entität namens Mika hast, das nannte Auto gemischt und das ist in Ordnung. Ich halte sie gerne konsistent, weil dies zu weniger Fehlern führt. Jetzt haben wir einen neuen Tisch. Was ich tun muss, ist fleischlich zu lassen , dass es eine Vier sein sollte oder es sollte einen Fremdschlüssel erstellen. Entity Framework macht Fremdschlüssel für uns sehr einfach. Was ich tun werde, ist okay, ich hinterlasse diese Validierungsnachricht für das Modell. Das ist in Ordnung. Aber unter all dem werde ich eine andere Eigenschaft legen, int make id. Ich habe darauf hingewiesen , dass Entity Framework es uns erleichtert, Fremdschlüssel einzuführen. Denn wenn wir sagen, dass wir einen Tabellennamen und eine ID wollen, wird automatisch daraus schließen, dass wir meinen, dass wir einen Fremdschlüssel wollen. Das ist also zumindest Schritt eins. Wenn man int mic ID sagt, wird es wissen, dass ich eine Entität namens Mek habe, und es hat eine ID, also bedeutet die Kombination dass es einen Fremdschlüssel geben muss. Ein weiterer Teil dazu besteht jedoch darin, unsere Navigationseigenschaften hinzuzufügen. Also würden wir sagen Machen Sie mich diese Navigationseigenschaft besagt im Grunde, dass wenn ich ein Auto bekomme und das Mikrofon vom Auto wissen wollte, machen Sie Namen wirklich in der Fabriktabelle gespeichert. Also alles, was ich wirklich losfahren muss, ist das ABA-Auto und es hat ID1 gemacht. Ich weiß nicht, wie der Name ist, nur vom Autotisch. Alles klar. Wenn Sie also an Datenbanken gewöhnt sind, würden Sie wissen, was ich meine, wenn Sie in die Autotabelle schauen oder wenn es sich um Fremdschlüssel handelt. Alles, was Sie sehen, sind, dass die ID-Werte ID1 verursachen können, dann Auto aus Mikrofon ID1. Es geht bereits in Cs Make-ID ein. Wir kennen die Details nicht. Indem wir diese Eigenschaft hinzufügen und allgemein gesprochen, fügen wir sie als virtuelle hinzu, damit sie Bedarf außer Kraft gesetzt werden kann. Also kannst du einfach weitermachen und das machen. Aber wenn wir diese Navigationseigenschaft hinzufügen, wenn ich ein Auto abrufe, kann ich sagen, dass Sie bitte auch alle Details dieser zusätzlichen Tabelle oder der zugehörigen Tabelle angeben. Dann kann ich die Mikrofoneigenschaft mit allen Details mitbringen . Welche Details auch immer in mich eingingen, vielleicht konnte ich nicht einmal etwas hineinstecken, um zu sehen, in welchem Land sich das Mikrofon befindet. Sagen wir, wenn ich kreativ werden möchte, würde ich sagen, dass diese Marke aus diesem Land stammt. Und dann würde ich hier auf das gleiche Problem der Datenqualität stoßen , wenn ich das Land willkürlich verlasse, weil etwas aus den Vereinigten Staaten von Amerika von einem Bursa, USC als USA geschrieben werden könnte eine andere Person, die US-amerikanische Band auf die Person usw. Deshalb sollten Sie, wenn Sie etwas haben, das Sie kontrollieren möchten, es in eine eigene Tabelle legen und dann einen Fremdschlüssel erstellen Verweis darauf. Ich werde noch nicht zu kompliziert. Betrachten wir zwei Tabellen und wir führen dieses Fremdschlüsselkonzept ein. An dieser Stelle weiß das Auto, dass es einen Fremdschlüssel für die Tabelle haben sollte, in der die Navigation oder die Validierung von Modellen geltend gemacht hat. Also ist es erforderlich. Ich werde auch verlangen, dass die ID im Jahr eingegeben ist. Wir können ein Jahr benötigen, wenn wir wollen. Wir könnten auch mehr Validierung auf diese beiden Spritzen setzen. Minimum, Minimum für das Jahr. Nehmen wir an, wir wollen nichts weniger als 1990er Jahre in den Systemen. Alles, was 191990 oder vor 1990 ist, ist nicht anwendbar. Und dann maximal Lass es uns einfach auf 2021 setzen. Wir sind im Jahr 2021. Also zeige ich dir nur die Reichweite. Die Validierung funktioniert wirklich. Lass mich Raum das Mosaik kann alles in seinem eigenen Raum sehen . Denken Sie daran, dass all diese Anmerkungen, all diese Dinge, die Datenbank fälschen müssen um den Datenbankschritt Nummer eins zu beeinflussen, oder nachdem Sie diese Änderungen vorgenommen haben, besteht der nächste Schritt darin, ein Migration. Ich habe immer noch meine Migrationsbefehle von der letzten Migration oder den letzten datenbankbezogenen Aktivitäten. Wir haben uns an eine Stadt erinnert, ein Standardprojekt für das Datenprojekt. Und er kann nach oben drücken, um die vorherigen Befehle zu erhalten. Ich drücke nur nach oben, um die Add-Migration zu erhalten. Ich ändere einfach einen Fehler. Also habe ich die Tabelle gemischt, Eingabetaste und mein Build-Feld gedrückt. Warum bin ich warum ist mein Build fehlgeschlagen? Nun, das liegt daran, dass ich den Namen und den Namen gelöscht habe sehr verwendet wurden in anderen Teilen meiner Anwendung sehr verwendet wurden. Wenn Sie dabei codieren, ist dies eine dieser Konsequenzen der Refaktorierung der Anwendung Ricci und etwas , das Sie während des restlichen Antrags möglicherweise einen Welleneffekt haben . Also lasst uns das einfach halten. Erstens haben wir das Löschformular eingeführt und so weiter. Also brauche ich wirklich nicht die Delete View und diesen Löschpunkt CSS HTML. Was ich also tun werde, ist das einfach zu löschen löschen, Kraftstoff zu löschen. Das brauche ich nicht. Gut für das Erstellen. Was muss ich tun, ist Zone zumindest vorübergehend zu kommentieren. Überall dort, wo in einer Ihrer Ansichten auf die Name-Eigenschaft zugegriffen wurde, können Sie einfach weitermachen und sie finden. Es wurde hier benutzt, komm in Totes und kam hier in Summen. Also nein, es sei denn, es wird in der Liste angezeigt. Das Update wurde auch hier in dem Formular verwendet , dass Sie Ihre Fehlerliste nur noch einmal überprüfen können , um zu sehen , wo Sie möglicherweise verpasst haben. Und ich werde Control Shift und B machen , um ein Build zu machen, nur damit es neu kompiliert werden kann und ob ein Fehler vorhanden ist und es keinen gibt. Versuchen wir es also noch einmal mit der Package Manager-Konsole. In Hörbarkeit erfolgreich und wir haben unsere Migration. Was in unserer Migration ist, wird die Spalte von Name zu Modell umbenennen. In Ordnung, nur weil wir die Eigenschaft geändert haben, wird sie so angezeigt, wie ich es umbenenne, anstatt zu löschen. In Ordnung, für unsere Meek ID-Sitze die die Spalte hinzufügen, ist es ein int. Es ist nicht verfügbar und der Standardwert ist 0. Obwohl wir 19192021 drei Zoll sitzen würden. Das bedeutet also, dass es selbst dann niemals dieses Feuer bekommen sollte bei dem die Datenbank den Standardwert auf 0 setzen müsste den Standardwert auf 0 weil der Client sagte, dass wir die Validierung immer durchführen werden. Wir haben gesehen, dass das schon passiert ist. Dann wird eine Tabelle namens Mix mit zwei neuen Spalten erstellt , ihr den Primärschlüssel gibt. Und dann sieh dir diesen Teil an. Es erstellt einen Index. Ein Index in einer Datenbank ist eine Hochgeschwindigkeitssuche. Wenn wir uns also auf Autos freuen, die die Ideen verwenden , sind die wichtigsten Ideen oder wir verwenden das, um zu sagen, geben Sie mir alle Autos mit dieser eindeutigen ID. Wenn Sie diesen Index für diese Spalte erstellen, wird dies sehr schnell erledigt. Wir fügen auch die Fremdschlüsseleinschränkung hinzu. Es heißt, fügen Sie einen Fremdschlüssel in den Tabellenautos hinzu, die Spaltenmikrofon-ID, in der die Haupttabelle gemischt ist, und das Prinzip der Spalten-ID. Mit anderen Worten, ein Fremdschlüssel bedeutet, dass die ID im Auto stabil ist, niemals einen Wert erhalten kann, der in der Mix-Tabelle nicht verfügbar ist . Ich kann kein Auto hinzufügen, das nicht vom Typ ist oder nicht in der gemischten gemischten Tabelle. Wenn es in der gemischten Tabelle ist, habe ich festgestellt, dass Sie drei Symbole haben. Fügen Sie ein Auto mit ID TIN hinzu. Ich stelle einfach nur ein Auto ein, das nicht anwesend ist. Das ist also eine Art Schutz. Sie nennen diese Datenintegrität also wenn Sie über das Datenbankdesign sprechen und um diese Integrität durch Ihr Anwendungsdesign aufrechtzuerhalten. Zwischen all diesen und Validierungen wird diese Datenintegrität aufrechterhalten. Wieder einmal ist die Dome-Methode im Grunde der Teardown. Wenn wir also die Migration rückgängig machen müssen, wird sie dies tun um die vorgenommenen Änderungen aufzuheben. Und nachdem wir all das getan haben, gehen wir zurück und aktualisieren die Datenbank. Diese Start-Bit-Datenbank und die Package Manager-Konsole, bei denen einige Pfeile nirgends zu sehen sind, sind keine Probleme. Lasst uns diese Pfeile durchlesen. Es sieht, dass der Befehl Alter nicht ausgeführt werden konnte , wo der Verweis auf die Fremdschlüssel-Mix-Tabelle hinzugefügt wird. Also hat es in diesem Mix eine Spalten-ID. Und kurz gesagt, ohne die Sache ist, dass diese Pfeile sehr kompliziert aussehen. Der Wortlaut, wenn Sie es nicht gewohnt sind, ist er möglicherweise nicht sehr benutzerfreundlich. Aber die Realität ist, dass Sie bestimmte Keywords auswählen, wenn Sie nur aufpassen . Genau hier. Es heißt, dass die Höhe Stephen-Konflikt über die Fremdschlüsselbeschränkungen in der Spalte war die Fremdschlüsselbeschränkungen , für die wir trainiert wurden, was eher mit Meek ID gemischt ist. Also was ist das Problem? Das Problem, obwohl die Bereiche, die das wirklich sehen, hey, das ist das Problem. Wenn wir in die Datenbank gehen und in die Autotabelle schauen, denken Sie daran, dass wir einige Autos betreten hatten. Er hatte Autos in unsere Datenbank eingegeben oder sie haben nicht die Mikrofonidee, was sie da sind. Und die Mikrofonkennung kann nicht 0 sein, da die Mikrofon-ID erneut kein Wert sein kann , der in der Mikrofontabelle nicht vorhanden ist. Dies ist eine dieser Gefahren, wenn Sie Datenbanken wechseln und Migrationen durchführen. Ich muss eine Änderung vornehmen. Und es gibt zwei Möglichkeiten, eine Änderung vorzunehmen , wenn Sie einen Fremdschlüssel in eine Tabelle einführen , die bereits Daten enthält Eine der Gefahren besteht darin, dass Sie mit diesem Fehler enden werden . Dies ist einer dieser guten Aras, ich nenne das einen guten Fehler, von dem ich lernen kann. Dieser Konflikt liegt daran, dass ich einen Fremdschlüssel in eine Tabelle einfüge , die bereits Regeln enthält, die den Fremdschlüssel nicht benötigten. Soweit es betrifft, verletzen diese bestehenden Rollen und Rollen die Einschränkungen , die dem Fremdschlüssel gesagt werden sollte. Der Fremdschlüsselspalte wird mitgeteilt, dass sie nicht null sein kann und ihr Standardwert ist 001041. Entschuldigung, er ist ein ungültiger Wert für unseren Fremdschlüssel. Warum? Weil du das nicht hast. Ein Primärschlüssel stimmt mit dem Primärschlüsselwert 0 überein. Meek ID kann also niemals in der Make-Tabelle enthalten sein. Sie können niemals ein Wert von 0 sein. Es muss immer eins oder höher sein. Es kann niemals 0 sein, indem man versucht, IT Pro einzugeben, reaktiv in die Datenbank oder nachdem es bereits Zeilen gibt, versucht es ihnen den Standardwert 0 zu geben, was dazu führt Konflikt , über den es spricht. In Ordnung, ich kann die Migrationsdatei hier tatsächlich ändern. Oder ich kann die Migration entfernen, das Modell geändert und den Fehler beheben. Also zeige ich Ihnen einfach welche Änderungen ich an der Migration vornehmen würde. Und das wäre, das Wissen von falsch zu wahr zu ändern . Mit anderen Worten, das kann hineingehen, der Fremdschlüssel kann hineingehen, aber es muss nicht unbedingt ein Modell haben. Die bestehenden Autos werden einfach nicht wissen, welches Modell sie sind. So ziemlich gäbe es keine. Darum stimmt niemand. Dann muss ich auch nicht auf den Standardwert sitzen , weil es bekannt sein kann. Wenn es also keinen Wert gibt, dann ist es nein. Wenn es einen Wert gibt , gibt es ein Volumen. Das ist Option a. Option B, es wäre Option E. Lassen Sie mich bevor ich fortfahre. Option a, würde mir erlauben zu wissen , dass ich die Update-Datenbank einfach noch einmal ausprobieren kann. Und dann würde es einen neuen und bearbeiteten Migrationsvorgang ausprobieren , der wäre, diese Spalte als nullbar hinzuzufügen. Und diese beseitigen jegliches Konfliktpotenzial. Das ist also eine der Optionen, wenn es darum geht , Migration zu generieren. Das entspricht nicht unbedingt den Anforderungen . Sie müssen dies ändern, die Migration ändern und es erneut versuchen. Nein, eine andere Option wäre, und ich würde diese Option wahrscheinlich wählen , da dies eine sicherere Option in meinem Buch ist. Erstens: Entferne die Migration. Also sieh einfach, okay, vergiss, dass ich dir gesagt habe, dass du diese Migration machen sollst. Um das zu tun, Es ist buchstäblich die Bindestrich-Migration zu entfernen. Ich habe diesen Befehl immer früher gesehen, als wir die Anzeigenmigration durchgeführt haben , und es hieß, diese Aktion rückgängig zu machen Benutzerverschiebung Migration. Wir haben eine Migration , die Qualität ist. Wir wollen es rückgängig machen. Also sehe ich nur Migration entfernen. Es wird diese Datei tatsächlich aus dem Migrationsordner löschen . Dann habe ich mein Modell aktualisiert, um dann Regeln zu haben, die eine bittere Migration erzeugen. Die Regel, die ich ändern wollte, ist, dass ich die Mikrofon-ID nullbar gemacht habe. Eine andere Sache, die die Entscheidung des Entity Frameworks beeinflusst , dies zu einem Int zu machen , der nicht nullbar ist, ist unsere Notation, um zu sagen, dass es erforderlich ist. Dies wird ein perfekter Übergang darüber sein , wie wir die Validierung auf Datenbankebene von der Validierung auf clientseitiger Ebene trennen müssen die Validierung auf Datenbankebene von der Validierung auf clientseitiger Ebene da ich an diesem Punkt sehe erforderlich für das Jahr und die Sitzecke und Joe K, das wird sich nicht wirklich auf eine Datenbank auswirken. Aber dann haben wir gesehen, wo sich das Optimierte in der Datenbank widerspiegelt, und dass das Modell nicht nullbar ist, spiegelt sich in einer Datenbank wider. Wenn ich das dann auf der Benutzeroberfläche nullbar gemacht habe, werde ich es definitiv brauchen, ich werde sie nicht hochladen, um mit der Spannung fortzufahren. In der Datenbank, in der sie sagen, dass es optional ist, trennen sich diese jedoch in zwei verschiedene Welten. Die Anforderungen an die Benutzeroberfläche unterscheiden sich von den Anforderungen der Datenbank. Behalte das einfach im Hinterkopf. Aber wir werden dieses Konzept kurz abschließen. Nachdem ich die erforderliche Anmerkung und int und int erstellt habe, kann ich wissen, dass ich meine Migration erneut ausführen kann. Und wenn ich das mache, sieht meine Migration nicht für die Spalte, sie ist int, aber sie ist nullbar. Kein Standardwert. Das ist kein Problem. Alles andere ist in Ordnung. Wenn wir also unser Datenbankcenter aktualisieren, ist es erfolgreich. Sie werden noch einmal sehen, Analyse darauf eingehen muss, was das Problem verursachen könnte , genauso wie der Fehler nicht wirklich darauf hingewiesen hat. Aber das ist einer dieser Bereiche, in denen im Allgemeinen, wenn Sie diesen Fehler sehen, darauf achten, welche potenziellen Risiken sein könnten , die ich ruiniert habe, wenn ich einen Fremdschlüssel einführe im Allgemeinen, wenn Sie diesen Fehler sehen, darauf achten, welche potenziellen Risiken sein könnten, die ich ruiniert habe, wenn ich einen Fremdschlüssel einführe zeigen Sie in mein Datenbankdesign, denn dies wird eine fortlaufende Aktivität sein. Wenn Sie etwas Neues sehen, müssen Sie es bearbeiten. Nun, so einfach ist es einfach zu generieren. Eine Migration wird in der Datenbank stattfinden, aber dann wird es schwieriger da die Regeln und Einschränkungen um die verschiedenen Spalten im Vergleich zu den vorhandenen Daten gelegt werden um die verschiedenen Spalten im Vergleich zu den vorhandenen Daten gelegt , die möglicherweise habe zum Zeitpunkt der Eingabe nichts von den Regeln gewusst. Wir stellen diesen neuen Tisch vor, der beim Überspringen hilft und Sie werden sehen, dass wir den Tisch und das Auto stabil haben . Wenn ich das verlängere, wirst du sehen, dass in den Schlüsseln für die Autos ich in den Schlüsseln für die Autos den Fremdschlüssel habe , der gerade eingeführt wurde. Wenn du dir den Namen hier ansiehst den Namen in meiner Zeile 39, siehst du, dass er derselbe Name ist. Wenn schwule Autos auf der Punktzahl auf der Punktzahl unterstreichen Meek ID, ist das der Name des Fremdschlüssels. Wenn wir nach Mix suchen, werden wir auch sehen, dass er seinen Primärschlüssel hat. Also kein oder Säulen für Autos wäre die Idee, die ein Primärschlüssel im Jahresmodell ist. Und dann mach Idea das Schlüsselelement, das ich nicht daneben kann, was bedeutet, dass es sich um Fremdschlüssel handelt, Primärschlüssel. Fremdschlüssel sehen so aus. Wir haben erfolgreich eine weitere Tabelle zu unserer Datenbank hinzugefügt. Wir mussten auch Kompromisse eingehen und einige Dinge von unserer Benutzeroberfläche entfernen , was erleichtert wurde. Wenn wir zurückkommen, müssen wir unsere Benutzeroberfläche aktualisieren, um das neue Feld zu normalisieren. Felder, weil wir nicht mehr nennen, kennen wir unser Modell und wir haben Mikrofon. Und wir werden uns auch anschauen, wie wir die Regeln darüber trennen werden, was Benutzer auf der Benutzeroberfläche tun können, im Vergleich zu was Benutzer auf der Benutzeroberfläche tun können, im Vergleich den Regeln, die die Datenbank auferlegt. 17. Form – Teil 1: Alles klar Leute, wir machen gut weiter. Als wir letztes Jahr waren, haben wir das neue Band eingerichtet, bevor Mix auch den Fremdschlüsselverband für Mikrofone auf Autos einrichten wird . Wissen Sie, dass die Regeln, die wir befolgt haben, für eine beliebige Anzahl von Fremdschlüsseln erweitert werden könnten , da einige Leute das Antidote-Kit erweitert hätten. Sie werden Stahl nicht modellieren, weil sie nicht riskieren können, dass Leute das Wort Sony für denselben Nissan, Nissan Sony, schreiben . Und eine Person setzt einen ein, die andere Person setzt zwei Enden ein. Später schauen wir uns diese Art von Szenario-Board an, wir wollten uns darauf konzentrieren , unsere Benutzeroberfläche mit der Einführung unserer neuen Bereiche in Formen von Marken und Modelle oder Meek ID und Modell. Das erste oder gut, ich möchte nicht als erstes sagen, als müssten wir dieser Reihenfolge unbedingt folgen. Aber eine Sache, die wir definitiv brauchen werden, wären die Crowd-Seiten für den Gemein. Da wir nein schreiben können, Autos eine Abhängigkeit von Meek ID. Ich kann nicht sehr gut eine Dropdown-Liste für das Mikrofon anstelle der Autos erstellen, es sei denn, Mix existiert. Ich muss ein paar Seiten erstellen , damit wir den Mix verwalten können. Ich gehe einfach weiter und klicke auf Neuen Ordner hinzufügen. Und ich nenne das Mix. Dann haben wir zuletzt eins nach dem anderen alle Codepages erstellt. Wir haben die Seite „Erstellen“ gemacht, also haben wir die Bearbeitungsseite usw. Für mich habe ich eine größere Großhandelsoperation durchgeführt. Wir klicken also einfach mit der rechten Maustaste auf diesen Ordner, klicken auf Seitenreihe hinzufügen, und dann verwenden wir die Option Razor-Seiten mit Entity Framework und Rohöl. Okay, klicken Sie auf Hinzufügen. Dann wird er sagen, okay, was ist die Modalklasse dieses Mal, wenn wir es mit Mikrofon zu tun haben, das ist der Datenkontext und klicken Sie auf Hinzufügen. Wenn Sie sich jetzt ansehen, was sich im Ordner befindet, werden Sie sehen, dass alle Seiten, die wir gesehen haben, nacheinander sorgfältig hinzugefügt wurden , wenn wir es mit Autos zu tun Sie sind alle für uns generiert. Wir haben das Indexgebot, das die Liste der Mix ist. Wir haben die Bearbeitungsseite, die das Formular ist, um den Mix zu bearbeiten, wir haben die Details. Alle von ihnen wurden in einem Sweep generiert. Ich habe dich eins nach dem anderen durchgeführt , damit du dir den Code ansehen kannst. Jetzt, da wir ein besseres Verständnis dafür haben, was jede Seite unter dem generierten Code macht , tut es. Wir könnten einfach die Großhandelsgeschäfte erledigen. Sie können das für Ihren Unterricht tun, aber gehen Sie nicht zu voraus und beginnen Sie es noch für alles andere zu tun, denn es gibt mehr Dinge, die wir im Design beachten müssen, aber nein, es ist in Ordnung. Jetzt haben wir die Fähigkeit, Daten in die gemischte Tabelle zu erstellen oder einzugeben. Und sobald wir Daten in diese Mix-Tabelle eingegeben haben, bauen wir diese Liste in der Datenbank auf. Wir müssen in der Lage sein, diese den Benutzern zu präsentieren , wenn sie in Autos einsteigen. Eine Sache, die ich tun werde, ist, diesen Menüpunkt oder ein unbekanntes Element zum Layout-Pitch hinzuzufügen ein unbekanntes Element zum , damit wir dorthin navigieren können. Und dann kontrolliere ich einfach F5 und mache einfach einen schnellen Test, nur um sicherzustellen, dass der Code für mich funktioniert. zum Link springen, können wir auf Neu erstellen klicken. Und dann ist der erste Toyota create. Und wir sehen geschaffen. Also haben wir keinen Code geschrieben, wissen es einfach. Alles, was wir getan haben, war nur einem einfachen Schritt des Gerüsts oder aller Seiten zu folgen . Und jetzt haben wir all diese Bearbeitungen. Wir haben die Details. Wie Sie sehen, kam er mit den Standardknöpfen und Links und so weiter zurück . Also dachte ich immer an die Gleichmäßigkeit der Blasen. Wir wollten sicherstellen, dass unsere Buttons für alle unsere Apps so aussehen , damit Sie sie stylen können . Trainieren Sie flexible Bootstrap-Muskeln Nr. Und fange an, okay zu sehen. Ich möchte, dass alles genauso aussieht. Kein Problem. Im Moment allerdings. Wir möchten uns nur auf die Funktionalität konzentrieren. Also kriegen wir, lass mich einfach noch einen reinlegen. Zu diesem Zeitpunkt wäre vielleicht ein Administrator derjenige, der diese gemischte Liste verwaltet. Das ist in Ordnung. Wenn wir uns das Create for Car ansehen, denken Sie daran, dass wir bis zum Feld kommen mussten , das im Namen bleiben wird. Aber nein, wir brauchen ein Feld für das Modell und wir benötigen ein Feld, das eine Dropdown-Liste mit der Liste der Mix ist. Was wir tun müssen, ist zu unserer Seite für Autos zu springen , und ich werde diesen Abschnitt für den Auto-Punktnamen auskommentieren. Keine Scheibe kann geschnitzt werden Modelle, Auto-Punkt-Modell. Das ist unser neuer Input für diesen Abschnitt. Aber ich werde auch vorstellen, dass ich nur die Formulargruppe kopiere. Wieder einmal Einheitlichkeit. Das wurde in jedem Mal generiert, wenn wir Kontrollen wollen. Ich behalte es einfach in diesem Format. Selbst wenn ich es manuell tippe, musst du das manchmal tun. Es ist gut, einfach dieser Codierungskonvention zu folgen , da dies für den gewünschten Layer ist. Für das Kardon-Modell oder für das nächste würde ich Car dot mq ID sagen. Für die Mikrofon-ID möchten wir eine Dropdown-Liste. Wir wollen nicht, dass ein Kasten nimmt. Denken Sie also daran, dass dies Informationen ist, dass wir ein Tag namens select haben. Dieses Tag ermöglicht es uns, Optionen einzufügen. Die erste Option, die ich sagen werde , ist das Mikrofon auswählen. In Ordnung, das ist also die erste Aufforderung. Aber offensichtlich werde ich mich nicht hinsetzen und in all die anderen Optionen schreiben, Nissan und Toyota. Denn wenn ich das manuell mache, negiert das die Tatsache , dass wir diese dynamische Liste aus der gemischten Tabelle in der Auswahl haben wollen , sage ich ASP Dash Four. Das sind also Tag-Helfer , bei denen ich sehen kann. Ich möchte, dass diese Dropdown-Liste für die Auto-ID verwendet wird. Dann wäre das nächste zu sagen, woher bekomme ich die Gegenstände? Meine Artikel müssen aus einigen Listen stammen. Also werde ich mich mischen sehen. Ich bringe das nur da raus. Das ist noch nicht der Name der Liste, die existiert noch nicht. Daher die rote Linie. Im Code dahinter muss ich wenigstens den Namen Mix senden oder vorbereiten, der die Liste von mir x aus der Datenbank enthält. also rübergehe, werde ich wollen, dass unsere Eigentumsrechte auf dem Punkt erstellt werden. Oder eigentlich ziehe ich es vor, meine Eigenschaften über meinen Methoden zu haben . Ich mache nur diesen schnellen Refaktor. Das liegt daran, dass ich es lieber so habe. Wenn Sie kein Problem haben, muss kein Problem nicht unbedingt folgen, aber ich sehe sie gerne alle an einem Ort. Also ja, wir wissen, dass wir das Auto haben. Aber dann ging ich zu Public Select-List. Das ist also ein neuer Datentyp, den wir uns ansehen. Und ich nenne das eine Mischung. Wir machen das Gita und setzen uns. Dann nachdem ich die Schlitzliste auf get habe, erinnere dich daran, dass du vorbereitest. Vielmehr ist es da, damit wir alle Daten vorbereiten können , die für die Seite benötigt werden. Zuvor waren also keine Daten für die Seite erforderlich. Wir mussten einfach wieder in ein leeres Formular zurückkehren . Nein, ich muss dieses Zeug tatsächlich aus der Datenbank holen, aus der gemischten Tabelle, ausfüllen oder in diese gemischte Eigenschaft einfügen. Und ich denke, basierend auf dem Namen hier, oh, muss ich sagen, modellierte Mischung. Um Mix geschaffen zu haben, kann ich sagen, dass modelliert sich entschuldigt. Das ist ein model.fit-Mix. Und hier sind unsere entsprechend genannten Mikrofone. Ich muss Mix mit den Daten füllen , die aus der gemischten Tabelle stammen. Andernfalls wären wir nicht näher dran, irgendetwas zu erreichen, was wir sind. Nein. So kann ich sehen, dass Mix gleich ist, ich möchte keine neue Auswahlliste initialisieren , die es mir ermöglicht, eine Sammlung von Elementen zu übergeben . Und dann, genau wie beim Select-Tag oder der Dropdown-Liste, habe ich etwas, das angezeigt wird und etwas, das gefangen oder gespeichert wird. Mit anderen Worten, wenn wir das Mikrofon anzeigen, sollte der Benutzer Toyota, Nissan, Lamborghini, Ferrari sehen . Während wir jedoch die tatsächliche ID verfolgen und speichern müssen , haben wir gesagt, dass es der ASP für die sanftmütige IID ist, was bedeutet, dass alles, was ich aus der Dropdown-Liste auswähle, seinen Wert ansehen und diesen Wert speichern in der Make-ID. Ich werde jedoch den Namen anzeigen , der mit dem Mittelwert verknüpft ist. Für die Liste sehe ich den Kontext. Kontext. Bitte gib mir alle Mikrofone und um das aufzulisten sage ich, gib mir den ganzen Mix in der Datenbank. Dann sage ich einfach Como. Tut mir leid, ich werde nur sichergehen. Okay, ja, manchmal verwechsle ich sie. Wir haben also das Datenwertfeld und wir haben das Datentextfeld. Der Wert, den wir überprüfen, ist also der Mittelwert, ist eher die ID aus der gemischten Tabelle. Und wenn Sie es vergessen haben, gehen Sie einfach zur gemischten Tabelle, um zu sehen, wie die Feldnamen lauten. Der Wert, den wir transportieren, ist ID. Wir wollen den Namen zurückbringen. Sie bemerken auch, dass ich diese zusätzlichen Eigenschaften habe, also ist das tatsächlich optional, aber es dient dem gleichen Zweck wie wenn wir die Mikrofoneigenschaft in die Autos stellen, was bedeutet, dass ein Auto eines haben wird sanftmütig. Sie können kein Auto haben, das Sie einen anderen Mix nennen werden , um entweder einen Nissan zu haben , oder ich sage Ihnen, was einige Dinge sind. Deshalb haben wir im Autotisch eine ID für das Auto und eine Navigationseigenschaft. Toyota stellt jedoch viele Autos her. Wenn wir uns also einen Platten-Toyota ansehen, könnte es viele Autos geben, die die Toyota-ID Deshalb haben wir bisher eine Liste von Autos, jede Mikrofonaufnahme, die wir uns ansehen, wir können tatsächlich alles sehen Die Autos, die damit verbunden sind, sind alles damit verbunden. Während wir hier sind, kann ich das virtuell stumm schalten. Okay, zurück zu unserem Code, wo die ID zurückgeführt wird, aber wir möchten dem Benutzer den Namen anzeigen. Das sehe ich nur beim linearen Laden auf der Seite. Bitte führen Sie diese Abfrage aus, füllen Sie diese Liste aus und senden Sie dann die Seite zurück. Sobald wir all das gemacht haben, speichere ich einfach und steuere F5, um eine Vorschau anzuzeigen. Und hier sind wir. Ich weiß, dass es ein bisschen uneben aussieht, aber das können wir beheben. Was wir sehen, die Mikrofonkennung. Das ist also unser Label. Das haben wir nicht getippt. Alles was wir getan haben, war ihm das Label zu geben und zu sagen, lass mich einfach rüberspringen. Alles, was wir getan haben, war ein Etikett für eine eindeutige Kardamom-ID zu sagen. Nun, wir sehen das Label. Wenn wir in diese Dropdown-Liste schauen, sehen wir die Option Mikrofon auswählen. Wir sehen auch andere Dinge , die wir nicht als Optionen hinzugefügt haben. Sie sehen also, dass es in die Datenbank geht und Toyota und Nissan bekommt. Wieder einmal ist das Coole daran , sobald diese Liste aktualisiert wurde Wenn ich also Ferrari sage und erstelle, aktualisiert, sobald ich die Seite wird diese Liste aktualisiert, sobald ich die Seite aktualisiert habe und sie erscheint. In Ordnung, das ist die Macht dieser Dropdown-Liste. Wenn wir einschränken möchten, was der Benutzer eingeben kann, geben wir ihm einfach eine Dropdown-Liste und wir pflegen diese Tabelle. Ansonsten haben sie sehr wenig Kontrolle darüber, was sie für diesen Wert einsetzen können. Ich meine, stilweise, was uns fehlt, ist ein Klassenformular-Steuerelement Klassenformular-Steuerelement Select-Klasse entspricht dem Formular-Steuerelement. Ich speichere das einfach und aktualisiere es und lasse es kompilieren. Und das sieht ein bisschen besser aus. Und dann können wir uns auch ansehen wie wir alle Etiketten ändern können. Aber lasst uns versuchen, ein Auto zu bauen. Erstens, wenn ich Select-Mic sage, lege ich unser Modell nicht ein, ich lege das Innenohr nicht ein. Denken Sie also daran, dass hier ein Modell benötigt wird. Wenn ich versucht habe zu erstellen, wird es mir einfach sagen: Hey, du kannst nicht weiter gehen, bis etwas erledigt ist. Es sagt mir hier die falsche Validierungsnachricht. Und das liegt daran, dass ich nicht aktualisiert habe. Diese Validierung war weit. Das ist eine der Gefahren beim Kopieren und Einfügen. Stellen Sie einfach sicher, dass Sie alle Basen abdecken. Aber hey, deswegen sind wir hier, um es zu testen. Wenn ich Toyota reinlege, setze ich das Modell Sea Harrier ein. Das Jahr ist 2001. Wenn alles gültig aussieht und ich erstelle , sehen wir, dass unsere Liste mit drei zurückkommt. Wir fügen vorher zwei hinzu und beaufsichtigen drei. Nein, in der Liste wird nichts angezeigt. Y wird in dieser Liste nichts angezeigt. Lasst uns nun zur Liste springen und sehen. Also hatten wir den Namen und das Jahr kommentiert. Was ich tun werde, ist das alles zum Kommentar abzukommentieren, alles. Der Name gibt einen Fehler aus, da es keinen Namen mehr gibt, ist kein Modell. Und sieh dir diese Null an, wenn ich sehen möchte, welche Art von Karte das Jahr ist. Es ist also ein Toyota Harrier aus dem Jahr 2001. Was habe ich, oder? Nein. Ich habe nur das Jahr 2001, Mikrofon auf Meek ID, welches das Feld in der Datenbank ist. Aber offensichtlich kann ich nicht zeigen, dass die Benutzer es machen. Also werde ich nur anzeigen was die Benutzer sehen würden, wenn ich Meek ID sagen würde, weil die ID-Werte wirklich für den internen Gebrauch bestimmt sind, sie dienen nicht wirklich für die Sichtbarkeit eines Benutzers. Wenn ich aktualisiere und das sehe, nein, haben die ersten beiden keine Mikrofon-IDs und das ist in Ordnung. Wir verstehen warum , weil sie existierten bevor wir es ins Mikrofon brachen. Ich sehe jedoch nur einen. Was ist eins? Was ist eins höher? Das bedeutet dem Benutzer nichts. Wir haben also bereits festgestellt, dass Primärschlüssel für die Navigation nützlich sind. Also in all welchen Datensätzen wir uns ansehen und auf welchen Rekord wir zielen. In dieser Situation wird dies angezeigt, dies bedeutet dem Benutzer nichts. Deshalb haben wir die Navigationseigenschaft , die ich beschrieben habe. Als wir ein Auto erstellt haben, haben wir dafür gesorgt, dass wir diese Navigationseigenschaft einbauen , denn nein, ich kann sehen, dass ich mir das Mikrofon geben mit diesem Auto verbunden ist, und ich kann die Details dieses Mikrofons einholen die Form seines Namens. Ich kann also wissen, dass ich diese schnelle Änderung aus meiner Sicht treffen kann. Und ich werde es wahrscheinlich auf einen anderen Fehler ausführen, aber lassen Sie mich diese Änderung treffen, aktualisieren und das ist leer. Okay, lasst uns sehen, warum das schwarz ist. Es ist leer, weil ich bei der Vorbereitung der Daten sage, gib mir alle Autos. Ich muss der Frage sagen, dass ich, wenn du mir die Autos besorgst, auch die Details vom Mikrofon aufnehmen möchte. Ich hole die Autos, ja. Und er hat den Meek-Ausweis bekommen, aber er hat nicht die Details des Gemeines bekommen. Ich zeige dir nur, wie alles miteinander verbunden ist. Deshalb zeige ich dir immer wieder , was nicht funktioniert, wie wir es reparieren. Um die Details des Mikrofons zu erhalten, muss ich sehen, dass Autos Dot enthalten sind. Dann gebe ich einen Lambda-Ausdruck, in dem sie durchgemacht haben , wie Lambda-Ausdrücke aussahen. Ich sehe, dass sie sanftmütig sind. Jedes Mal, wenn Sie einen Fremdschlüssel eine Tabelle haben und diese Navigationseigenschaft haben, und Sie möchten eine Abfrage ausführen, bei der Sie auch alle Details aus der Fremdschlüsseltabelle erhalten auch alle Details aus der Fremdschlüsseltabelle als Haupttabelle. Das ist alles, was du tun musst. Datenbank Hol mir die Autos, füge die Details für die zugehörigen Sanftmütigen hinzu und gib mir dann alles wie zumindest nach dieser Änderung. Wenn ich wieder auffrische , sehen wir Toyota. Du siehst, wie bei diesem einfach alles zusammengekommen ist. Lassen Sie mich noch einmal nachsehen. Ich habe die Details des Mikrofons in die Abfrage aufgenommen. In Autos sind rüber gegangen. Es war leicht für mich zu sehen, das Auto zu geben, mir die Sanftmütigen besorgen und mir den Namen zu besorgen. Fall, dass ich vorher nicht erklärt habe, was diese Bereiche hier oben sind , anstatt dass sie hier nicht gemacht werden, wollen wir nur den Anzeigenamen. Sie könnten dies also einfach entfernen und Ihren eigenen Anzeigenamen eingeben, wenn Sie möchten, das wäre in Ihren eigenen Anzeigenamen eingeben, wenn Sie möchten, Ordnung. Nennen Sie hier, der Name bedeutet eigentlich nichts. Okay. Ja, wir hatten anfangs genannt, aber wir hatten den Namen I will route oder Suzuki im Sport. Kein Name wird Toyota nur speichern , weil das Modell da ist, um ein höheres zu sehen. Das sollte also wirklich etwas mehr wie ich sagen. Wenn Sie ändern möchten, was angezeigt wird, können Sie diesen Code einfach entfernen und Ihren eigenen eingeben. Wir haben uns schon Tische angeschaut. Wir wissen, was wir in unseren eigenen Text für die Tabellenkopfzeile einfügen können . Mit dieser einfachen Änderung, wenn wir die Tabelle oder die Seite regenerieren, sehen wir, dass sie nicht sanftmütig gedruckt wird. Okay, also siehst du, wie alles zusammenkommt. Die Sache ist also, dass wir diesen Feed im Grunde genommen überall wiederholen müssen, wo er Daten abruft und erwartet wird, dass er etwas anzeigt. Also ja, wir haben es in der Liste, aber lasst uns das durchgehen, heißt Regressionstest. Jedes Mal, wenn Sie eine Änderung an Ihrem System vornehmen, wollten Sie immer sicherstellen, dass alles, was immer erhalten und funktioniert, Stahlwerke. Wir sehen, dass die Liste funktioniert. Wir sehen, dass wir Arbeit schaffen müssen. Wenn ich mir Bearbeiten und Details anschaue, sehe ich das, okay, Update braucht noch etwas Arbeit daran. Und Details brauchen etwas daran zu arbeiten. Also lasst uns die alten ändern. Beginnen wir also mit den Updates, da wir bereits wissen, dass das Update genauso aussieht wie das Create. Ich muss nur die gleichen Felder nehmen , die ich in der für die Auswahlliste und das Modell erstellten Felder habe Auswahlliste und das , und es in das Update einfügen, genau darüber, dass Code kommentiert und einfügen. Aber es ist nicht nur das. Wir müssen diese Dropdown-Liste immer noch laden da Samen, die sie abschließen, nicht wissen, was Mischung ist. Genau wie das, was wir mit dem Create gemacht haben, wo wir diese Eigenschaft namens mic hatten. Jemand will dir wieder die Eigenschaft namens Mix geben. Dann muss ich das Objekt mit Daten füllen . Genau wie das, was wir gemacht haben, ist das hier auf dem Update hier zu kommen. Ich muss es sagen, geh ja, hier steht es im Auto-Rekord, um nachgelassen zu werden. Aber dann mache ich einfach weiter und setze diesen Mix ein. Wenn Sie also den Autodatensatz erhalten und NADH-Telefon nicht dynamisch zurückgibt, die nächste Datenbank aufgerufen, um den Mix zu erhalten, dann können wir die Seite zurückgeben, nachdem wir diese Änderungen an der Updateseite vorgenommen haben. Wenn ich aktualisiere, werde ich sehen, dass das passiert. Beachten Sie, dass das Mikrofon standardmäßig ausgewählt wird. Wenn ich zurück zur Liste gehe und eines auswähle, das ein Mikrofon hat, bindest du mir automatisch die Milch, die zuvor ausgewählt wurde. Es ist bindend. Es ist, es ist ein bisschen intelligent. Aber weil die anderen mich nicht hatten, zeigt es mir nichts, entschuldigen Sie, der Standardwert, sobald ein Wert einmal pro Woche getroffen wurde, wurde Ihnen die automatische Bindung bei der Bearbeitung für die Details zur Verfügung gestellt. Nun, bevor wir ins Detail kommen, wir sicher, dass dies immer noch funktioniert. Ich habe gesehen, dass dies ein zweitausend-Tool ist , genauso einfach ändern, speichern, und wir sehen, dass es reflektiert wird, also arbeitet der Editor immer noch. Das ist gut. Wir müssen die Details aktualisieren, um es wissen zu lassen , was davon erwartet wird, damit ich abkommentieren kann, dass der kranke SHA-1 zuerst war, ich habe es dupliziert, dann kann ich es abkommentieren. Dies ist kein Name, nicht mehr Name allein, sondern Punktname und dies ist kein Modell. Keine Details zeigen das Ohr, den Mikrofonnamen vom Mikrofon und das Modell an. Für unsere Anfrage. Wir müssen es wissen lassen, wenn Sie zuerst Autos bekommen. Dritter Zahlungsausfall. Bitte geben Sie noch einmal die Details des Mikrofons an. Also schließen Sie Lambda-Ausdruck und das Mikrofon auf, wir bekommen das Auto mit den Details. Und dann können wir alles sehen. Wenn ich mir die Details des Toyota höherer nom ansehe, sehen Sie, dass alles zurückkommt. Wieder einmal sehen wir diesen Namen stattdessen genau dort. Die Sache ist nein, ich ging zu Ich bin gegangen um die Eigenschaft hier zu ändern , weil wir es für den Index getan haben , wo ich sie manuell ändere. Aber dann möchten wir vielleicht für die Details tun, aber wenn wir es dann Geld ändern, werden sie jemals sein und dann der Kunde oder wer auch immer wir die Software bauen für ein kommt und sagt, ich tue mag dieses Label nicht, ändere das Etikett, dann sind das so viele Orte , wie wir die Änderung erfüllen müssen. schnellere Möglichkeit, diese Art von Änderung zu erfüllen , ist die Verwendung von Anmerkungen. Hier sehe ich die MEC-Klasse, die Sie anzeigen. Anzeige. steuern fehlende Bibliotheken Daten und geben Sie ein. Dann ist name der Parameter. Ihr Anzeigename ist also nur, indem Sie ändern , dass hier der hier über dieser Eigenschaft sitzt. Überall dort, wo der Anzeigename dafür ist, wurde er bereits aktualisiert. Überall dort, wo der Anzeigename für die Beta von Code verwendet wird , als würde er im Index verwendet werden. Bevor ich es in den Anzeigenamen für den Seed-Anzeigenamen ändere , wird automatisch nach einer Datenanmerkung über dieser Eigenschaft gesucht, die angezeigt wird und dann diesen Text verwendet. Das würde mir tatsächlich den Kummer dieses Geld ändern zu müssen, während sie überall sind, ich kann zum Anzeigenamen für den Index zurückkehren. Ich kann es im Detail behalten , weil es dort Anzeigename gibt. Überall dort, wo es referenziert wird, wird es diesen Geschmack automatisch verwenden. In Ordnung. Ich zeige dir nur nette sauberere Wege anstatt trocken zu tippen. Wiederhole dich nicht. Das ist eines der Grundprinzipien einer soliden Entwicklung. Wenn Sie also so wenig wie möglich Code erneut eingeben , suchen Sie immer nach einer Lösung die eine globalere Reichweite hat, im Gegensatz zu einer Lösung, bei der Sie immer wieder dasselbe tun müssen . Lassen Sie uns nun versuchen, etwas anderes Modell zu erstellen. Nennen wir es Tesla, Jahr 2221 erstellen. In Ordnung, also siehst du, dass dies für mich nicht gültig ist. Dies ist also einer dieser Standardfehler da wir keine Fehlermeldung darüber geschrieben haben, aber er weist uns nur zurück und sieht, dass sie für Meek ID nicht gültig ist. Daher erfolgt die Validierung fast automatisch an diesem Punkt. die gleiche Weise, wenn ich ein ungültiges Datum habe, muss das andere Jahr, als Sie sehen dass das Feldohr zwischen dieser Nachricht liegen muss. Diese Botschaft kommt auf, weil wir den Bereich für das Detail angelegt haben. Auf diese Weise können Sie die Benutzeroberfläche verbessern und bestimmte Regeln für Ihre Benutzer durchsetzen , um Ihre Datenintegrität zu bewahren. 18. Form – Teil 2: Alles klar Leute. Was wir tun wollen, ist weiter darauf aufzubauen, wie wir Foren verbessern und die beiden Dinge, die wir tun müssen , um sicherzustellen, dass wir unseren Nutzern die beste Erfahrung bieten. Wenn es um die Validierungsschritte geht, würden Ansichten feststellen, dass unsere Gültigkeit nicht getroffen wird Gültigkeit nicht , wenn wir versuchten, die ungültigen Daten zu übermitteln. Und das liegt wirklich daran, dass wir hier die Validierungsskripte haben, um sicherzustellen, dass nur gültige Daten über den Kunden hinausgehen, und das ist gut. Aber für den Fall, dass es bestimmte Umstände gibt, unter denen es vielleicht denkt, dass es auf dieser Seite gültig ist, dann brauchen wir eine Validierung auf der Serverseite. Das ist also clientseitige Validierung. Sie haben mich über die ganzen Kunden sprechen hören. Ich denke, dass die clientseitige Validierung im Frontend stattfindet, oder? Zwischen JavaScript und HTML lassen wir die Benutzer wissen, was gültig ist und was nicht. Wenn ich ein ausgeschaltetes JavaScript verwende, können sie diesen Mechanismus leicht umgehen. Es kann auch Zeiten geben, in denen bestimmte Validierungsregeln serverseitig ausgewertet werden müssen . Wenn Sie also eine komplexe Logik haben, haben Sie vielleicht eine andere Validierung, um sicherzustellen , dass das Modell mit dem Automikrofon oder ähnlichem übereinstimmt . Was auch immer es ist, es ist komplex. Es kann nicht wirklich Portrait in unserem ESR sein , noch ist es erforderlich oder liegt zwischen diesen Werten. Es ist nicht wirklich ein boolescher Wert oder etwas, das schnell ist. Und dann müssten wir auf der Serverseite oder im Code einige komplexere Validierungsregeln erstellen Code einige komplexere Validierungsregeln Serverseite oder im , um sicherzustellen , dass sie gültig sind. Was ich gerade darstellen möchte, ist was passiert wenn die clientseitige Validierung vielleicht nicht läuft. Um ein schnelles Experiment damit zu machen, werde ich nur die Validierungsskripte teilweise auskommentieren . Wenn Sie also schnell kommentieren, setzen Sie den Cursor auf das Zeilensteuerelement. Casey wird kommentieren und die Steuertaste, die Sie auskommentieren werden. Halten Sie die Kontrolle gedrückt. Sie drücken die Taste, dann drücken Sie C und dann kommt es rein. Und dann machst du dasselbe mit Schlüssel und dir, und es wird sich auskommentieren. Ich deaktiviere dieses Skript , das auf der Clientseite läuft. Und ich werde den Haltepunkt hier setzen, damit wir sehen können , was passiert, wenn etwas ins Forum eingeladen wird. Ich klicke einfach auf Erstellen und schau was passiert. Es springt direkt zur Post. Es gibt also keine Validierungsnachricht. Denken Sie daran, dass wir das letzte Mal immer die gesamte Validierungsnachricht über den Button drucken würden. Nein, es findet keine clientseitige Validierung statt. Unser Ausfallsicherheit ist also dieser Modellzustand, Modellzustand DOT ist gültig, ist gültig, die Netzhaut ist falsch. Wenn wir in die Modellzustände schauen, nur damit wir genau verstehen können, was hier passiert. Lucy, Validierungsstatus in gültig, wie viele gibt es, dann haben Sie die Schlüssel und Ergebnisse. Also lasst uns zu den Ergebnissen gehen. Ergebnisse würden uns die Schlüssel und die Validierungssätze jedes Schlüssels zeigen . Der Schlüssel hier wäre also jeder Wert, der sich in dem Modell befindet, das validiert wird, oder Modulauto. Und die Validierung würde sagen, dass das Jahr erforderlich ist, Modell erforderlich ist, eine ID machen, obwohl alle diese erforderlich sind. Nein. Keiner von ihnen wurde zur Verfügung gestellt. Alle von ihnen sind ungültig. Und wenn Sie dann einen Drilldown durchführen möchten , sehen Sie den Schlüssel, Sie sehen den Wert, und dann gibt es Ihnen einige andere Details. Der versuchte Wert war, dass es viele Dinge gibt , die Sie aus diesen Modellstatus nicht herausbekommen können. Also hier ist genau dieser Fehler. Es heißt, dass der Wert, der eine leere Zeichenfolge ist, eingeladen wird. Das ist der Gelehrte, den Sie dorthin gelangen werden, drücken Sie F5 unbegrenzt, fahren Sie fort. Das ist es, was Altes verhindert. Wir erhalten also diese Validierungszusammenfassung und wir erhalten jeden Fehler unter jedem Feld. Wenn ich also etwas einfüge, das außerhalb des Wiedereintritts liegt, sagte der Bereich zwischen 1999 und 2020. Wenn ich also 1990 setze und es erneut versuche, ist es immer noch ungültig. Ich drücke erneut F5. Nein, es wird uns ein anderes zeigen oh, tut mir leid. Ich hätte 1900 sagen sollen. Das wäre eingeladen worden. Lass mich das nochmal versuchen. Schaffen Sie also Wärme, den Haltepunkt, fahren Sie fort und los geht's. Das Feldohr muss also zwischen 19902021 liegen. Wir sehen also die ganze Validierung , bei der wir mit diesem Randolph vertraut sind. Das ist was? Serverseitige Validierung setzt die Tabelle zurück, wenn jemand sein JavaScript in seinem Browser deaktiviert, oder aus welchem Grund auch immer der Bereich mit einem Umgehung des JavaScript, weil alles mit HTML und und CSS stehen Ihren Benutzern zur Verfügung. Es geht also um sicheren Codierknoten da ich nur das Element überprüfen muss. Ich kann alles über dem Code sehen. Ich könnte diese gewissen Dinge ändern. Ich könnte dieses Skript auf dieser Seite deaktivieren, solche Sachen. Das ist ein Loch, der wichtige oder serverseitige Validierungsschritt besteht darin , sicherzustellen, dass wir es nicht tun, wir geben keinen Müll an unser System zurück. Ein weiteres großes Problem , das ein großes Problem , mit dem wir uns definitiv befassen müssen, ist die Tatsache, dass ich gerade von vorne anfangen würde. Wir schaffen Neues. Wir haben unsere Liste von Mikrofonen macht keinen Spaß. Ich sagte Toyota-Modell, Automodell, was auch immer. Ich klicke auf Erstellen, Winter, entferne diesen Brute-Punkt, weil wir wissen, dass er ungültig sein wird , weil es kein Modell gab, keinen Wert für das angegebene Jahr. Aber was ist mit den Sanftmütigen passiert? Sieh dir das an, diese Liste ist verschwunden. Was passiert ist, dass Sie, wenn wir es mit der Auswahlliste und bestimmten Arten von Listen im Beitrag zu tun haben, immer sicherstellen müssen, dass Sie zurückkehren müssen, wenn Sie die Seite zurückgeben möchten die Seite mit all diesen zusätzlichen Daten. Denn im Moment sind die einzigen Daten, die gut beibehalten werden können , alles, was die bind-Eigenschaft darüber hat. Selbst wenn ich die Ben-Eigenschaft über der Auswahlliste hier sehe, gibt es in Wirklichkeit keine Felder in meinem Formular, um die gesamte Liste zu speichern. Ich habe ein Feld zum Speichern der ID , die aus der Liste ausgewählt wurde, aber nicht die gesamte Liste. Diese Liste muss jedes Mal aktualisiert werden, wenn diese Seite geladen wird. Nur um zu sagen, dass wir die Liste nicht aus der Datenbank und pro Periode abrufen können. Es könnte also geladen werden, wenn ich ungültig bin oder der pH-Wert, die Einreichung ist in einem ungültigen Zustand und der pH-Wert muss zurückgegeben werden. Der pH-Wert muss ohne Mischung zurückgegeben werden. Also habe ich ein Beispiel dafür gemacht, was ich hier meine. Ich werde hier nur einen Code eingeben , der nur var mix sagt. Nach dem Absenden ist gleich mix. Wir werden uns vor dem Absenden ansehen, was im Mix ist. Und dann schauen wir uns an, was nach einer Einreichung mit dem Mix passiert . Mit den neuesten Versionen von Visual Studio, die früher im Debug-Modus sind, können Sie einfach auf Codeänderungen anwenden klicken. Dann geh zurück zu deinem Code. Ich aktualisiere einfach die Seite. Alles klar, lasst uns das einfach noch einmal durchmachen. Ich werde versuchen zu erstellen und schicke etwas , das ungültig ist. Ich werde meine Haltepunkte zurücksetzen, damit es pausiert damit wir uns ansehen können, welcher Wert hierher kommt. Ich werde auch hier einen Bruchpunkt setzen , bevor es einen Pfirsich zurückgibt. Also wenn ich sehe, Okay, lass mich einfach auffrischen. Lass mich das nochmal machen, tut mir leid. Also erstelle Mittag. Wenn ich dann neu erstelle, trifft es diesen Haltepunkt für die Seite. Wenn ich also in Mix schaue, sehe ich, dass Mix Daten hat. Es hat immer noch, was darauf hindeutet, dass es Daten hat. Es enthält die Elemente, die in die Dropdown-Liste aufgenommen werden. Okay, das sieht gut aus. Ich werde nur diesen Haltepunkt entfernen. Schicken Sie etwas , das ungültig ist. Als der Bruchpunkt die if-Anweisung war , traf es nicht. Also verschiebe ich es einfach auf die Zeile 34 für mich oder den ersten Brief von der Methode. Ich werde darauf eingehen und dann lasst uns Mix nachschlagen, Mix ist null, nur um mein Punktwerkzeug zu steuern , und dass Sie, sobald die Daten gesendet wurden, dies auswählen und im Grunde alles, was zumindest nicht ist entbeint zu sein oder das nicht entbeint werden kann, wird leer sein. Sobald du dich einreichst. Was wir tun müssen, ist diese Liste zu aktualisieren. Ich höre einfach auf. Und wir werden diesen Code tun , um sicherzustellen, dass die Seite immer mit ihrer Auswahlliste versehen ist. Oder in einem Fall, in dem Sie mehrere Dropdown-Optionen haben, ist dies das gleiche Konzept. Dies stellt sicher, dass alle von ihnen mit den Daten gefüllt sind , wenn der pH-Wert überhaupt geladen wird. Also könnte ich diesen Code einfach nehmen und hier platzieren. Wenn der Modellstatus ungültig ist, laden Sie die Liste der Mischung neu und kehren Sie dann zur Seite zurück. Andernfalls machen Sie einfach weiter, damit der Datenbankaufruf nicht verschwendet wird. Wenn der Modellstatus gültig ist, wird er nichts davon tun. Es wird einfach darauf gesprungen und weitermachen. Wissen Sie, was ich nicht gerne mache, ist Code wie diesen zu wiederholen. Warum scheint es einfach zu sein und es ist einfach genug kleine Klassendatei und es ist wirklich nur eine Zeile. Aber was ändert sich dann etwas? Denken Sie daran, ich sagte , je mehr Sie inmitten des Codes um die Anwendung wiederholen, desto schwieriger wird Ihre Wartung , wenn sich etwas ändert. Was ich tendenziell mache, ist private Methoden zu haben. Also sage ich einfach „Private Task“. Wir sagen einfach „Private Task“. Und ich mache es zu einer asynchronen Aufgabe. Hier. Nennen Sie es auffüllen, Dropdown-Listen. Es ist man, es würde einfach Dropdown-Listen füllen nennen. Und dann mache ich diesen Methodenaufruf. Das würde also wissen b. Und ich kann diesen asynchronen Mitarbeitern zumindest eine Senke treffen , bei der ich diese Bibliothek einbeziehen muss. Und dann kann ich diesen Weizen treffen. In Ordnung, also ist es eine asynchrone Methode. Ich wollte die asynchronen Methoden nutzen. Was ich weiß ist, diese Methode einfach überall zu nennen , wo ich diese Population machen muss. Wenn ich mehrere Dropdown-Listen habe, muss ich ausfüllen. Ich habe gerade dazu gebracht, sie einfach hier reinzulegen, sobald ich das anrufe. Und dann kann er das tun, weil es andere Situationen gibt , in denen Sie möglicherweise Daten benötigen, die nicht auf der Seite gefangen sind. Möglicherweise muss es auf dem pH-Wert vorhanden sein , wenn der Modellstatus eingeladen wird. Sie können also, warum ich Populate Dropdown-Liste aufrufe, können Sie es auch wie Lord nennen, Anfangsdaten. Bei Fragen, Operationen, die Sie ausführen müssen , bevor die Seite sichtbar ist, legen Sie den gesamten Code hier ein, damit wir ihn nicht in Ihren Handlern wiederholen müssen. Wenn Sie mehr als 100 haben, nur 100 keine Rolle. Du musst es nicht wiederholen. Nein, ich muss es abwarten, wenn ich den Anruf tätige, weil es asynchron ist. Aber dann gibt mir dieser einen Pfeil, und das gibt mir einen Fehler, weil diese Methode nicht asynchron ist. Wandeln wir diesen also in asynchron um. Asynchrone Aufgabe. Und es wird erwartet, dass diese Aufgabe etwas vom Typ i Aktionsergebnis zurückgibt. Und wenn ich das alles gemacht habe, glühen alle roten Linien und alle sind glücklich. Ich zeige Ihnen nur ein paar Fallstricke oder Dinge, auf die Sie achten sollten, wenn Sie Ihre Bewerbungen schreiben. 19. Formulare und Validierung der Datenerhebung verbessern – Teil 1: Okay, also erstellen wir diese Anwendung und haben es unseren Stakeholdern gezeigt , denn am Ende des Tages Sie am Ende des Tages, das meiste von dem, was Sie aufbauen werden müssen Sie am Ende des Tages, das meiste von dem, was Sie aufbauen werden, jemandem vorführen. Während du es testest, während du es entwickelst, testest du es. Sie orientieren sich entweder an ihren Erwartungen in Form von Softwareanforderungen oder orientieren sich an dem, was Sie für brauchen, was gefährlich sein kann. Weil sie uns in dieser Situation ohne formelle Anforderungen ohne formelle Anforderungen Feedback gegeben und uns mitgeteilt haben , dass bestimmte Dinge definitiv geändert werden müssen. Nein, Nummer eins, sie sagen , dass sie mehr Informationen über die zu lagernden Autos benötigen . Kenne das Jahr, das Mikrofon, das Modell. Das sind nicht genug Informationen. Wir müssen sagen, welche Farbe das Auto und um eine Lizenz zu teilen, die meiner Meinung nach Dichtungspunkte sind. Ein weiteres Problem, auf das sie hingewiesen haben , ist, dass Rechtschreibfehler auftreten können , weil wir das Modell als Freitextfeld verlassen haben. Während Musik eine Dropdown-Liste ist, ist das Modell nicht. Und wir haben die Gefahr davon früher besprochen. also für das gleiche Ergebnis, das wir erzielt haben, eine Dropdown-Liste. Wir müssen eine Modeller-Dropdown-Liste erstellen. Das bringt seine eigenen Herausforderungen auch mit sich, weil Modell, wir können kein zufällig Modell setzen. So zum Beispiel ein Nissan, Nissan, Sony mit einem Auge. Das sind Rechtschreibfehler. Nichts hindert jedoch jemanden davon ab, Ferrari Sunniten einzutippen . Und wenn Sie etwas über Ferraris wissen, wissen Sie, dass sie kein Modell namens Sunniten haben. Sie sagten also auch, dass sie bei der Auswahl eines Mikrofons sicherstellen wollten, dass das Modell, das sie danach auswählen können , tatsächlich für diesen Meek gilt. Das sind einige Anforderungen , die uns in den Weg gekommen sind. Wir haben tatsächlich Dinge im Zusammenhang mit einigen dieser Änderungen gemacht . Und mal sehen, wie das funktionieren wird. Die erste Änderung , die ich vornehmen werde , ist die Auto-Entität. Denken Sie daran, dass wir Mikrofon eingeführt haben, wir müssen mehr Felder einführen und das sind wir nicht, wir sind bereits damit vertraut, was wir tun müssen , um neue Bereiche einzuführen. Im ersten Feld verwende ich nur Control D zum Duplizieren, damit ich nicht alles von Grund auf neu eingeben muss. Das erste Feld wäre String. Das wäre Farbe. Farbe ist auch ein anderes sensibles Thema. Weil jemand blau schreiben kann, kann jemand B0 schreiben, jemand wirkt Schwarz entgegen und vergisst das c. Das ist also ein anderes sensibles Thema. Möchten wir die Farbe des Fahrzeugs als Freitext belassen ? Oder wollen wir es sperren und in der Liste haben? Dies sind Entscheidungen, die wir treffen müssen, um sicherzustellen, dass unser System von den Nutzern gerecht wird. Persönlich. Ich bevorzuge es, Farben in einer Liste zu haben, da dann die Wahrscheinlichkeit, dass Benutzer falsche Farben eingeben, Farben sind, die nicht einmal existieren, stark verringert wird. Genauso wie wir die Anrufer-ID haben. Dies wird ein Fremdschlüssel sein. Lassen Sie mich also, lassen Sie mich ein bisschen zurückgehen und ich werde die neuen Felder in der Reihenfolge einführen. Okay, also unter mir bin ich gegangen, um öffentliche Int zu retten und ich schaffe kein Level. Denken Sie also daran, warum wir dies zur Verfügung stellen mussten . Wir führen nachträglich einen Fremdschlüssel ein, nachdem es bereits Aufzeichnungen gibt. Wir wollten also sicherstellen, dass wir nur sehr wenige Konflikte mit den Fremdschlüsselwerten haben . Wir werden eine andere Immobilie haben, die ein virtuelles Eigentum sein wird und sie Farbe nennen wird. Es wird Farbe selbst genannt, geben Sie Farbe ein. Es wird Farbe genannt, keine Farbe. Sieh dir das an. Ich kann einfach Kontrollpunkte machen. Wir haben keine Klasse namens Color. So kann ich sehen, dass ich einen Typ namens color generiere. Und es wird sie fragen, soll es in einer neuen Datei benötigt werden? Ich wollte es mir ansehen, ja, weil ich für uns neu bezeichnen wollte. Dort ist es als Farbe erschienen und dieser Fehler ist verschwunden. Das ist also ein netter schneller Weg, wenn Sie neue Typen erstellen und nicht vtable erstellt haben, Sie spülen oder was Sie tun müssen. Visual Studio hat Vorschläge, die Ihnen helfen, produktiver zu sein und sich nicht auf die kleinen Dinge zu konzentrieren. Das ist Farbe. Was brauche ich? Wir brauchen die Liste für das Modell. Das Modell wird das gleiche Schicksal erleiden , das der Name erlitten hat. Einige entfernen einfach das Modellfeld. Dies wird eine Modell-ID sein. Du wirst feststellen, dass ich immer zurück gehe und korrigiere. Lassen Sie etwas weg, das nicht groß geschrieben ist oder wie ein Rechtschreibfehler ich immer im Garten arbeite , denn wenn Sie es richtig machen , geht es das erste Mal in die Firewall. Mit dem Modell bin ich also noch einmal mit der Verwendung einer Bibliothek verbunden. Ich wollte eigentlich mein eigenes Vertrauen schaffen. Und dann ist das Modell, wie Sie sehen, tatsächlich wie ein Schlüsselwort, weil es Modell ist. Sie hätten mich über Modelle sprechen hören, als wir über Entity Framework gesprochen haben. Es ist also irgendwie riskant, wenn ich das Klassenmodell einfach aufrufe, weil ich nicht weiß, mit welchem anderen Namen oder mit welchem anderen Datentyp ich in Konflikt stehe. Ich nenne es ein Automodell, nur um auf der sicheren Seite zu sein. Der Datentyp, den ich erstelle, heißt Automodell. Aber dann rufe ich das Feld in meinem Klassenauto an, nur Model. Alles klar? Wieder einmal nennt man es manchmal anders. Manchmal nennt man es genauso, wenn man ihn sehen müsste, wir kennen Probleme, also nennen wir es einfach genauso. Dies ist Automodell, ID, Automodell und das Feld-Automodell. Was brauchen wir für unsere neuen Unternehmen? Alle von ihnen brauchen genau wie das, was schneiden könnte. Sie brauchen alle einen Ausweis. Sie brauchen einen Namen und alle werden diese Kartenliste haben. Tatsächlich können diese Felder einfach über alle hinweg repliziert werden. Für die Farbe haben wir also ID-Fotofarbe. Das Display hier wäre farbig und nicht sanftmütig. Also siehst du, ich kopiere und füge nichts falsch daran, NPC1L1 zu kopieren , um das Konzept zu verstehen oder was du erreichen willst, du kannst immer kopieren und einfügen und beschleunigen Ihre Produktivität. Okay, also haben wir diese drei Felder in Farbe. Und dann machte ich dasselbe in unserer Fahrzeugmodellklasse mit Kontrollpunkt, um fehlende Referenzen einzubeziehen. Dann wäre dieser hier im Namen der Disziplin. Ich kann ein Modell sehen, weil wir wissen, dass wir uns das Auto ansehen, also muss ich dem Benutzer kein Automodell sagen. Dies liegt nur daran, dass ich versuche, Konflikte zu vermeiden, und dies ist erfahrener Stalking, weil ich das schon einmal erlebt habe. Fühlen Sie sich also nicht, wenn Sie sich fragen, okay, woher weiß ich wann es einen Konflikt geben könnte oder nicht? Manchmal ist es Versuch und Irrtum. Manchmal machst du es, wenn du versuchst zu laufen, du stößt auf das Problem, also änderst du es. Kein Problem. Wir haben Automodellfarbe, wir haben Auto und wir haben Meek. Nein. Eine andere Sache, auf die ich an dieser Stelle hinweisen werde ist die Tatsache, dass sie alle ähnliche Felder in jedem einzelnen dieser Entitätsmodelle verwenden , das bisher das Feld namens ID hat. Lassen Sie mich sie einfach so weit ausräumen , wie diese drei haben, die alle drei zusammenschmelzenden gemeinsamen Autos nicht haben, irgendetwas anderes gemeinsam. Aber mein Punkt ist, dass Sie, anstatt ID, ID, ID, ID und ID jedes Mal zu wiederholen , eine Sache, die Sie tun können, um die Wiederholung erneut zu reduzieren und die Erweiterbarkeit und Teilbarkeit zu erhöhen Erweiterbarkeit und Teilbarkeit der Code wird eingeführt , was wir als Basismodell bezeichnen. Also werde ich ein neues Element erstellen, das ich Base eine neue oder andere Klasse nennen werde , weil ich diese Domain in Tutti aufrufe. Und dann werde ich diese öffentliche abstrakte Klasse kennenlernen. Es ist also abstrakt. Abstrakte Klassen bedeuten im Grunde, dass sie da sind, aber Sie können keine Instanz von ihnen selbst haben. Sie wählen „Mit Auto fahren“. Wir können initiierten oder ein anderes Auto hier, das ich einfach auf Auto anrufen kann, wenn es sich um eine abstrakte Klasse Sie können diese Entitäts-basierte Domain-Entität nicht einfach irgendwo nennen . Es ist jedoch gut für Erbschaftszwecke. Also habe ich von hier aus prop int id gesagt. Wisse, dass ich dieses Feld hier habe. Ich kann jedem anderen. Jeder, der dieses ID-Feld benötigt, um nur von B zu erben, ist Domänenentitäten. Wenn ich das mit dem Automodell mache, merkt man, dass dieser Ausweis ausleuchtet. Nun, die Botschaft, die es mir sagen wird, ist, dass diese Eigenschaft hier die geerbte Person stört. Es sieht also einen Konflikt, es ist kein Fehler, Fehler. Sie warnen Sie nur, dass, wenn Sie beabsichtigen, den Wert dieses Wertes zu erben , immer Vorrang vor dem geerbten haben wird. Aber der Sinn, dass ich erbe, dass ich es dort nicht sehen will. Jedes Mal, wenn Sie Felder haben, damit sie später in Ihrer Karriere leicht sind, sprechen Sie möglicherweise über Auditing, wo Sie speichern möchten, wer ein 10-Watt-Datum erstellt hat. Es wurde geschaffen. Wenn Sie solche Felder haben, legen Sie das alles einfach in die Basisdomänenentität und stellen dann sicher , dass jeder Körper, der eine Datenbankklasse ist, von der Basisdomänenentität erbt , die wir jede Klasse wird diese Felder unabhängig haben. Dieser Knoten wird ihre Wiederholung reduzieren. ich das nächste Mal einen anderen Kurs habe, muss ich keine Zeit damit verbringen, den passenden Tinnitus zu setzen , der erbt. Wenn es fünf Eigenschaften gibt, die die IVR-Klasse haben sollte oder jede Tabelle gemeinsam haben sollte. Ich habe sie einfach alle in den Bass gesteckt. Jeder erbt es. In Ordnung, also mache ich das einfach für alle meine Domain-Entitäten. Also Autos eingestellt, CAR-Modell ist eingestellt, Farbe ist eingestellt und lässt Sie sitzen. Jeder erbt von der Basis. Also wenn ich wollte, wie gesagt, nur eine verlängerte Requisite. Sagen wir also, ich wollte wissen, wann es erstellt wurde. Also Requisite, Zeit. Erstelltes Datum? Nein, ich kann sagen okay, ich weiß, wann dieses Modell erstellt wurde, wurde dieses MOOC erstellt, als dieses Auto in das System gesteckt wurde usw. Dies sind alles wichtige Teile, Dies sind alles wichtige Teile wenn Sie es zu tun haben -Systeme. Mit diesen Änderungen. Springen wir zu unserer Package Manager-Konsole. Und ich füge einfach eine neue Migration hinzu. Also werde ich sagen, dass weitere Auto-Datentabellen hinzugefügt wurden. Das ist meine Botschaft. Ich würde Migration und welche Botschaft diese ganze Aktivität so gut wie möglich beschreibt . Und dann lassen Sie es weitermachen und generieren Sie dieses Migrationsbaufeld. Ja, natürlich die Fähigkeit sich einzumischen, weil alle meine Ansichten, die ein Modell haben, nicht schreien werden. Ähnliche Geschichte wie das, was wir mit Namen durchgemacht haben. Aber noch einmal ist es besser, dies zu erledigen während wir uns in der Entwicklungsphase befinden, Gegensatz zu der Zeit, wenn Sie in der Produktion sind. Wir gehen einfach schnell unkommentierte alle Felder durch , die vom Modell abhängig sind. Und das werde ich nochmal versuchen. Und dieses Mal bekommen wir unsere Migration. Lassen Sie uns die Migration also schnell durchschauen. Wir sehen, dass wir die Spalte für ein Modell löschen in dem die Spalte für das Erstellungsdatum hinzugefügt und hinzugefügt wird und zum Mischen hinzugefügt wird. Wir fügen die Fahrzeugmodell-ID zu Autos, die Anrufer-ID und das Erstellungsdatum hinzu, all diese werden zu Autos hinzugefügt. Und sie haben die zusätzlichen Tabellen erstellt. Und dann setzte ich diese Indizes und die Fremdschlüssel auf, die vorher nicht da waren. Natürlich macht die Kuppel all das einfach rückgängig. Sollten wir eine Migration entfernen? Nach all dem haben wir eine Update-Datenbank erstellt. Und wenn alles gut geht, erledigen wir das, wir sind fertig. Lasst uns jetzt unsere Felder aktualisieren. Also zurück zum Create. Create hat kein Automodell mehr. Jetzt haben wir Modell-ID, Modell-ID, und wir haben eine Validierung für Modell-ID oder Entschuldigung, Automodell, Das ist der Name des Feldes. Es ist die Auto-Modell-ID. Und dann haben wir tatsächlich eine Auswahlliste, genau das für die Modelle. Also machen wir ein Mikrofon und wählen dann Modell aus. Dann kommen unsere ASP-Artikel nicht von Mix aus einem Feld namens Models , in dem wir in ein paar sitzen werden. Wir müssen diese Liste auch erweitern, um eine Einrichtung für unsere Farben zu haben. Genauso müssen wir die Modelle einsetzen. Wir müssen unsere Anrufer-ID, Anrufer-ID eingeben und Farbe auswählen. Dann kommt dies aus einer Liste von Farben. Alles klar, großartig. Also das ist es für oder kreieren. Und was ich tun werde , nur um das noch einmal ganz einfach zu machen , indem ich nichts falsch daran kopiere und einfüge. Ich gehe einfach zum Update und ändere diesen Gedanken, weil es wirklich dieselbe Dynamik sein wird. Das ist es für das Update für unseren Index, wir können dies abkommentieren und dann die Fahrzeugmodell-ID eingeben. Es wird also der Name des CAR-Modells sein. Im Index. Das wollen wir das Jahr, das Mikrofon, das Automodell zeigen . Und nehmen wir an, wir wollten das Bild einsetzen, tut mir leid auch die Farbe, es wäre Farbpunktname. Sie werden die Bedeutung der Navigationsfelder sehen. Und dann heben wir uns ab. Das ist also Automodell, Punktname, Farbe, Punktname. Okay, also das verlängert das nur. Dies ist ein normaler Bestandteil eines Softwareentwicklungsprozesses. Du wirst etwas tun. Sie werden Feedback erhalten, und dann müssen Sie einige Dinge rückgängig machen und einige Dinge wiederholen, neue Dinge tun. Es ist nur ein normaler Teil der Softwareentwicklung. Also haben wir unseren Index aktualisiert oder aktualisieren oder erstellen. Es sind also nur die Details, jetzt aktualisieren wir das einfach. Wir können die anderen für die Details tun. Auch. Wissen Sie dabei, dass mir tatsächlich in den Sinn kam, dass der Kunde eine Sache gab , die wir nicht eingegeben haben , und das ist das Nummernschild. Wir haben alles außer dem Nummernschild eingefügt, nicht zu diesem Zeitpunkt. Wieder einmal haben Sie zwei Möglichkeiten. Er kann entweder alle Änderungen rückgängig machen, die Sie an der Datenbank vorgenommen haben , und dann in das fehlende Feld einfügen. Und dann. Wiederholen Sie die Migration. Ich werde das alles nicht durchmachen. Was ich stattdessen mache, ist C Public Nummernschild. Ich werde einen Stream benutzen, weil Nummernschild, obwohl es Nummer heißt, keine wirklich Nummer ist. Manchmal ist es alphanumerisch. Ich kann mein Land es ist alphanumerisch. Und ich habe eine allgemeine Faustregel , dass ich int und double oder irgendwelche numerischen Datentypen nicht verwende , es sei denn, ich habe diese Zahl für irgendeine Form von Mathematik verwendet . Ich füge einfach hinzu, solange es Nummer heißt und obwohl es sich in Ihrem Land um strenge Zahlen handelt, wird es nicht für irgendwelche signifikanten Arten von Kollisionen verwendet . Vollständige Nummer Ich würde die volle Nummer nicht als Nummer in der Datenbank speichern . Ich speichere es als Stärke, denn jemand steckt Bindestriche oder Klammern und so weiter, dann ist es nicht mehr nur eine Zahl. Wenn das Nummernschild mit Buchstaben geliefert wird, hat nur während einer Testzeichenfolge keine Konsequenzen. Ob es alle Zahlen sind, ist alphanumerisch. Ich stelle dieses neue Feld vor und alles, was ich tun werde , ist nur eine weitere Migration hinzuzufügen , die besagt, dass ich ein Nummernschild gemacht habe. Ich tippe immer wieder Namen ein. Es tut mir leid. Aber ich bekomme ein Build-Feld. Das liegt daran, dass wir diese noch nicht haben. Was ich also tun werde, ist, diese zur Migration zu kommentieren . Lass uns schnell versuchen, lass uns das versuchen. Wieder Migration. Name der Schaltfläche „Personen“. Ich will keinen Namen. Ich bin gegangen, um die Migration zu entfernen und habe sie korrigiert und mir das Nummernschild angesehen. Und dann bekommen wir die Migration dort, wo es heißt, dass sie nur das Problem des Spaltengesetzes hinzufügt. Wir könnten es validieren. Manchmal macht man etwas und dann meinst du, oh schnappst, ich habe diesen Schritt vergessen. Also lasst uns zurückgehen und es einfach tun. Nummernschildnummern werden benötigt. Und ich setze eine Saitenlänge von zehn. Das ist großzügig in meinem Buch weil ich glaube nicht, dass jemand wirklich eine Unterrichtsplanzahl von Zinn in meinem Land hat , sie sind sechs Zeichen lang genug, die Sie reservieren oder niedriger sie sind bis zu sechs, aber das heißt, setze es auf zehn. Also sollte niemand in der Lage sein, einen Aufsatz in diesem Bereich zu schreiben. Lass uns das nochmal machen. Jetzt muss ich die Migration entfernen und dann Migration hinzufügen. Es ist gut, dass Microsoft uns nicht jedes Mal belastet, wenn wir in dieser Erklärung waren Wir können es so oft wie nötig tun, um sicherzustellen, dass wir es richtig in die Datenbank bringen. Also siehst du hier, es ist Invar, Char Zinn Muslime und nicht nullbar. Das ist in Ordnung. Dann sehe ich Update-Datenbank. Das ist erledigt. Okay, jetzt haben wir unser Nummernschild eingeführt. Ich kann zurück zu meinen Unterarmen gehen und kann diese Eingabe für die Lizenzspaltung eingeben. Alles klar. Also kann ich das nicht kommentieren. Gordon, komm rein, vergewissere dich, wenn es in Tizian erklärt wird, lege Lektionen die Nummer in das Formular. Dann mach das Gleiche für das Update. also das Kommentieren aus und führen Sie das Feld für die geteilte Nummer der Lektion ein. Wieder einmal folge ich dem gleichen Format. Obwohl ich ein neues Feld brauche, kopiere ich es einfach, füge es ein und ändere dann, was ich ändern muss. Beachten Sie, dass all dies eingeführt wird. Was wir tun müssen, ist sicherzustellen, dass wir die anderen Dropdown-Listen laden. Im Moment haben wir Mikrofone. Ich brauche eine für die Farben und eine für die Modelle. Genauso wie wir Mix aufladen mussten. Wir müssen Farben und Modelle aufladen. So können wir das einfach tun, ohne den Aufwand sowohl im GET als auch im Post zu duplizieren , ich kann es bitte tun und eine Lade anfängliche Daten sehen. Hier. Setzen Sie sich die Modelle an, um Kontextpunkt Models.swift Liste zu sein. Sie haben alle das gleiche Format und das sind wirklich Automodelle. Entschuldigung. Hab ich nicht genannt. Das ist in Ordnung. Dann haben wir Kontextpunktfarben und wir haben ID-Namen. Sie werden feststellen, dass ich diese Fehler bekomme. Und wenn du mir sagen kannst, warum ich diese Pfeile bekomme, dann hat Steve das Lob aufgepasst. Wenn du es mir nicht sagen kannst, ist das in Ordnung. Der Grund, warum wir diese Fehler bekommen, lassen Sie mich das einfach schnell ändern. Der Grund, warum wir diese Bereiche bekommen, ist, dass der Kontext nichts über Automodelle oder Farben weiß. Also versuche ich hier auf Tabellen zuzugreifen, von denen der Kontext nicht weiß warum er jetzt keine Kontexte aussieht, während wir sie in die Datenbank legen und eine Entitäten erstellt haben, die wir immer noch setzen müssen Die DB sitzt. Ich muss es sehen. Bitte schlagen Sie diese Einheit namens Automodell gegen einen Tisch namens Automodelle. Und Farbe gegen Farbe. Dies ist ein guter Punkt, um all diese Nuancen zu zeigen , denn es ist leicht, diese kleinen Dinge zu übersehen. Und ich habe diese Fehler bewusst gemacht, nur ein Punkt oder eine konsistente Maut ist sehr wichtig. Denken Sie daran, dass dies den Namen der Tabelle darstellt , indem Sie DB Set CAR-Modell und Automodelle sagen. Hätte ich dies vor der Migration eingeführt hätte die Migration gesagt , dass der Tabellenname Automodelle ist und der Tabellenname hier Farben ist. Aber weil ich die Migration bereits gemacht habe, schau dir an, was passiert. Der Name der Tabelle ist Automodell und der Name der Tabelle ist Farbe. Seien Sie also sehr vorsichtig damit. Was auch immer der Tabellenname hier ist, Sie möchten sicherstellen, dass Sie dies auf dieser Seite mit dem Namen spiegeln , den Sie ihm geben, und dann passt dieses Aussehen nicht zu mir. Die Autos, ich. Ich mag es nicht wirklich , wenn es so ist. Wieder einmal verlangen sie uns nicht, Migrationen, Heim- und Einwanderungsurin zu betreiben . Das liegt wirklich an Ihnen und wie viele Migrationsdateien Sie wirklich wollen. Aber wenn Sie mehr üben, machen Sie weniger Fehler wie diesen und Sie werden sehen, dass sie es beim ersten Mal richtig machen. Und dann merkt man , dass Sie, wenn Sie fünf Migrationen ausführen müssen , um eine Sache zu erledigen, einfach geradliniger geschrieben haben. Jetzt, da ich das in Automodelle und Farben gesteckt habe, kann ich zur Pockets Manager-Konsole gehen und eine Migration durchführen. Und ich sehe Kartentabellennamen, also ist das meine Migration. Wenn ich diese Migrationsdatei bekomme, sehe ich das auch, indem ich einfach die Fremdschlüssel ablege , die Primärschlüssel ablege, die Tabelle umbenenne und sie dann wieder hinzufügt. Es führt einen ganzen Schritt-für-Schritt-Prozess durch, wie es sogar das Umbenennen von Tabellen behandelt. Es mag einfach erscheinen, aber ich habe nie voll geschätzt, welche Datenbanken im Backend durchlaufen , bis ich tatsächlich gesehen habe, welche Art von Migrationscode für das generiert wurde , was ich wahrgenommen habe sehr einfache Operationen, oder? Es ist also immer gut, sie Migrationen mit solchen Dingen umgehen zu lassen . Sie fügen die Migration einfach hinzu , wenn nötig. Also aktualisieren wir einfach die Datenbank. Und sobald das erledigt ist, und wenn Sie wieder auf Pfeile stoßen, kommen Sie einfach in den Code. Wahrscheinlich in der Form würde das Update-Formular wahrscheinlich einen Code haben , der Probleme verursachen wird. Du kommentierst es einfach, tust was du tun musst, und dann kommen wir wieder darauf zurück. Also zurück in unserem Create jetzt siehst du, dass alle glücklich sind. Wir können Anfangsdaten laden. Wir haben dies nicht in unserem Update geladen , und das würde ich vorschlagen. Also werde ich diesen Code einfach abkommentieren , der Probleme verursacht hat. Wir brauchen Modelle und wir brauchen die Farben hier drüben und haben diese private Methode gewählt. Alles was ich getan habe, war es zu kopieren und einzufügen. Dann bin ich gegangen, um es zu erzählen, weiter und generiere Immobilien für Modelle. Siehst du das also? Dann mach weiter und generiere eine Eigenschaft, vier Farben. Wenn ich mir jetzt oben anschaue, sind sie da. Verwenden von Visual Studio als Produktivitätstool. Es hilft dir, dich weniger auf die kleinen Dinge zu konzentrieren und einfach Dinge zu erledigen. Nur dass ich weiß habe meine Auswahllisten. Was muss ich tun? Ich muss die erste Datenmethode von My Lord nennen. Eins. Wenn ich die Seite zurückgeben werde, rufe ich die Initialdaten laden auf. Das ist asynchron nach unserer Gewichtung. Wenn der Modellstatus nicht gültig ist, muss ich ihn erneut als Anfangsdaten bezeichnen. Das war's. Alles klar. Damit haben wir viel erreicht. Und selbst dann könnten Sie diese Funktionalität wahrscheinlich abstrahieren , die in eine Hilfsmethode integriert ist, die das für Sie tut. So technisch und kompliziert werde ich noch nicht. Ich gebe dir nur die Ideen, aber du siehst immer noch , dass wir diese Methode hier wiederholen müssen . Und auf den Create und vielleicht anderen Seiten, auf denen Sie sie möglicherweise auflisten müssen. Wenn Sie also die Wiederholung reduzieren möchten und dann begann er zu sehen, okay, wie kann ich eine Datei mit der Methode erstellen , die mehrere Orte verwenden müssen? Also kann ich es einfach anrufen und den ganzen Code an einem Ort haben , mit all dem gesagt und erledigt. Wir haben jedoch viel erreicht , um die Tabellen erweitert zu haben. Der Autotisch, den wir haben, erstellt neue Tische und wir haben für neue Dropdown-Liste Schnee erleichtert. Wenn wir zurückkommen, werden wir das Gerüst für die neuen Tische machen , weil wir das mit Mikrofonen gemacht haben , damit wir die Liste der Mix beibehalten können. müssen wir für die Farben und für die Modelle tun. Und dann schauen wir uns auch an, wie wir steuern können , welches Modell bei Auswahl eines Mikrofons auftaucht. 20. Formulare und Validierung der Datenerhebung verbessern – Teil 2: Hallo Leute, willkommen zurück. letzte Mal haben wir aufgehört , nur neue Tische zu setzen , und wir haben die Dropdown-Listen aufgenommen, aber wir müssen tatsächlich die Crowd-Strände um diese Listen herum platzieren . Ich mache eins mit dir und dann fordere ich dich auf, das Video anzuhalten und den Rest alleine zu erledigen. Lassen Sie uns also das Gerüst für unsere Automodellseiten machen. Und dann können wir einen neuen Ordner hinzufügen. Also sage ich einfach Automodelle. Stattdessen habe ich eine neue Razor-Seite hinzugefügt, Razor-Seiten mit Entity Framework Rohöl. Und dann modellieren wir ein Automodell. Fahren Sie fort und klicken Sie auf Hinzufügen und schließen Sie alle Fehler aus, was wiederum daran liegt, dass Sie wahrscheinlich nur zu früheren Versionen zurückkehren müssen , die funktioniert hätten. Sie können sehen, dass Ihre Automodelle gerüst wurden. Ich ermutige Sie , Pause zu machen oder einfach das Gleiche für Farben selbst zu machen. Wenn alles gut gelaufen ist, sollten Sie einen Ordner auf Ihrer Seite haben , der als Farben bezeichnet wird. Und alle groben Seiten. Was ich tun werde, ist schnell zum Layout zu gehen und die neuen Elemente hinzuzufügen. Also werde ich den Datenschutz entfernen, weil ich diesen Datenschutz wirklich nicht verwende. Also haben wir Autos, haben gemischte Modelle, wir haben Farben. Natürlich hat er gerade den Pfad zur Wurzel des ungefalteten Namensslash-Index geändert . Bei einer anderen Herausforderung , die ich euch geben würde , ist, wenn Sie daran interessiert sind die gleiche Weise zu verlängern, wie wir das Löschen der Autos gemacht haben. Denken Sie also daran, dass wir auf der Indexseite die gesamte Suite-Warnung und das Löschformular der jQuery durchgeführt haben, um das Löschformular und den benutzerdefinierten Handler für das Löschen auszufüllen . Ich möchte Sie ermutigen, das einfach an den anderen zu versuchen. Hier kommt die Praxis bei Automodellen ins Spiel. Wenn ich mir die Liste der Automodelle anschaue, was ist, wenn ich sie löschen möchte? Nun, wir können jQuery und alles einsetzen und in einen benutzerdefinierten Handler einfügen. Und du bräuchtest die Löschseite nicht. Ich ermutige dich, es selbst auszuprobieren. Wir haben es einmal gemacht, überprüfen, wie wir es gemacht haben, und wenden das Wissen an, denn so verbessern Sie sich als Entwickler. Lassen Sie uns geschuldet oder bewerben. Gehen wir zu Models und ich klicke auf Modelle und nichts passiert. Und das liegt an dem falschen Ordnernamen im Layout. Also mein schlechter Shun, erfrischen Sie sich. Versuch es noch einmal. Wenn ich zu Models gehe, sind wir da. Jetzt sind wir in den Automodellen dafür, ich habe ein neues Modell hinzugefügt und das wäre ein Sony für Nissan. Nun, beachte, dass es erstellt wurde. Ich möchte nicht, dass der Benutzer mir mitteilt, wann es erstellt wurde. Dies ist etwas, das automatisch sein sollte, dass ich möchte, dass das im Hintergrund geschieht. Ich möchte nicht, dass dies nicht auf dem Bildschirm sein sollte , damit der Benutzer Tool sehen kann, das im Hintergrund stattfinden muss. Denken Sie also später daran, wenn wir anfangen, uns die Modelle anzusehen. Denn wenn wir die Datenmodelle verwenden, ist dies eine der Einschränkungen, die wir für die Datenbank benötigten oder sie nicht für die Benutzeroberfläche benötigen. Es gibt Zeiten, in denen wir eine Trennung zwischen dem, was wir dem Benutzer gezeigt haben, und dem, was wir tatsächlich speichern, erstellen zwischen dem, was wir dem Benutzer gezeigt haben, und dem müssten. Dies ist eine dieser Situationen. Wir möchten dem Benutzer dieses Feld überhaupt nicht anzeigen, aber wir müssen es überall aufbewahren. Ich werde nur fortfahren, indem ich sehe, dass Model Sony ist. Machen Sie weiter und erstellen Sie ein ISI Notes Intermediate, das erstellt wurde. Warum ist das erforderlich? Weil wir ihr Erforderliches nicht überlassen haben. Der verwendete Datentyp ist jedoch die Zeit, die genau wie der int eine automatische Anforderung ergibt. Ich zeige dir nur, dass du die Dynamik all dieser Dinge hältst , wenn wir Dinge einsetzen. Wenn nötig, um das vollständige Bild noch zu betrachten, oder wenn wir auf solche Probleme stoßen, wie wir uns selbst arbeiten können, sind sie mehr dafür zu verstehen , unsere eigenen zu arbeiten. Deshalb habe ich das Datum benötigt, um Entschuldigung zu schaffen, ist stur und sagt uns, dass Wärme benötigt wird, also ist das vorerst in Ordnung. Um über dieses Haus hinauszukommen, geben Sie bitte einfach ein erstelltes Datum ein. Und da sind wir los. Also können wir ein paar Dinge hinzufügen. Spider, das ist Ferrari, hat das gerade heute Create gemacht. Und wir haben Toyota. Harrier war der erste in unserem System. Welcher andere? Tut mir leid, ich weiß nicht mehr, was der Mix wir haben, also lass mich einfach den Mix ansehen. Wir haben Nisan. Ich habe die zusätzlichen gelöscht, also haben wir mindestens einen bis 2171 Ferrari. Das ist gut. In unseren Modellen. haben wir. Nein, ich brauche ein paar Farben und ich werde das einfach halten. Ich sage nur Schwarz und Blau. Und blau. Wenn ich ein Auto erstelle, sagen Autos und ich Create New. Ich bekomme die Dropdown-Liste für mich. Ich kriege das Automodell. Aber ich treffe mich alle von ihnen. Ich könnte leicht Toyota Spider sagen. Dann sehen wir die Anrufer-ID, schwarz und blau, das Jahr, sagen wir 2020. Und das Nummernschild kann, wie gesagt, in meinem Land alphanumerisch sein, also könnte es 1234 AB sein. Das ist das allgemeine Format, das wir erstellen. Wir sehen wenigstens, dass es erstellt wurde, aber wir sehen kein Modell, wir sehen keine Farbe. Wo sehen wir moderne Farben? Foto eins, das wir gerade erstellt haben. Wir sehen es nicht aus dem gleichen Grund. Wir haben das Mikrofon anfangs nicht gesehen weil in unserer Abfrage, wenn wir an den Index kommen, also lassen Sie mich einfach zum Index für die Autos in dieser Abfrage springen . Wir müssen einbeziehen. Also muss ich sicherstellen, dass ich Include sage. Was ich mache, ist nur Grenzen zu brechen , damit ich einfach D kontrollieren und mein Leben viel einfacher kennenlernen kann. Intelligenter arbeiten, nicht härter. Wenn die Autos das Mikrofon, das Automodell, die Farbe und die neueste Version von Visual Studio Code enthalten Automodell, die Farbe und die neueste Version von , übernehmen Codeänderungen. Gehen Sie weiter und klicken Sie auf „Aktualisieren“, und wir sehen zumindest mit Color Comeback. Also lasst uns debuggen und sehen, warum wir das Modell nicht sehen. Also habe ich alle Includes gemacht. Sie können fortfahren und neu starten, wenn Sie bereits im Debug-Modus laufen Ich lege hier einen Haltepunkt , damit sie beim Laden der Daten pausieren und mir erlauben, fünf Autos zu befragen. Wenn das Auto, das ich gerade hinzugefügt habe, einen Ausweis machen muss, aber es hat keine Fahrzeugmodell-ID. Das bedeutet, dass mit dem Formular zwischen dem eingereichten Formular und dem Ankommen etwas schief gelaufen ist , etwas ist schief gelaufen. Das ist in Ordnung. Gehen wir also zu Create und sehen, was möglicherweise fehlt. Das ist also das Problem. Wow. Kopieren Sie NPS. Während es gut ist. Sei einfach sehr vorsichtig. Ich habe es immer noch an das falsche Feld gebunden , also sollte es Mikrofon sein. Ich speichere das, aktualisiere oder wende Codeänderungen an. Lass uns das nochmal versuchen. Fahren Sie fort und laden Sie das Create-Formular. Wir kommen zum Spinnenblock 1990. Und ich verwende einfach diese Unterrichtsnummer wieder. Entfernen Sie diese Haltepunkte. Also geht es einfach weiter und lädt und los geht's. Es kommt Button oder die Bindung geschieht wie erwartet. Das ist gut. Das ist wunderbar. Schlachten haben gekämpft. Wenn wir zu Edit gehen, sehen wir nirgends alles, was wir hatten Putin. Wenn ich das von Schwarz auf Blau und von Toyota zu Anheuern ändere , weil sie merken, oh, ich habe einen schwerwiegenden Fehler gemacht und klicke auf Speichern. Dann sehen wir, wir sind wieder auf Platz eins. Wir sind dabei, eins zu platzieren, weil ich das Create aktualisiert habe und den gleichen Code hier im Update verwende. Das Update hat immer noch diesen Fehler. Regressionstests immer wichtig , wenn Sie Änderungen an Ihrem System vornehmen, gehen Sie zurück und stellen Sie sicher, dass das, was früher funktioniert hat, Stahlwerke. Also lass mich das nochmal versuchen. Sparen und los geht's. Nein, die Bearbeitung funktioniert, schafft diese funktionieren, alle diese Funktionen funktionieren. Muss das funktionieren? Lass uns nachsehen. Okay, also funktioniert alles so, wie wir heben. Es ist das nächste große Ticketelement war, dass wir bei der Erstellung sicherstellen möchten, dass nur das jeweilige Modell relativ zum Mikrofon existiert. Das heißt, wenn ich ein Modell erstelle, muss ich es wissen lassen, zu welcher Marke es gehört. Und dann Werkzeug, wenn ich beim Erstellen des Autos ein Mikrofon auswähle, muss ich sicherstellen, dass ich nur die Modelle lade , die sich auf alle beziehen. Okay, das ist also sehr wichtig, das war sehr wichtig. Sie betonten sich bei dem Treffen. Lasst uns also sehen, wie wir das machen können. Das erste, was wir tun müssen, ist, eine Mikrofonkennung einzuführen. Wir müssen also eine Beziehung zwischen dem Modell und dem Mikrofon herstellen und konzeptionell darüber nachdenken. Denn ich meine, wenn Sie ein Auto haben und wissen, dass Sie zu dieser Zeit bestimmte Marken von Autos haben, bestimmte Modelle. Das ist unsere Beziehung. Wenn Sie also ein Kreuzworträtsel machen würden, Pausen Laura, eine dieser Kreuzworträtsel-Matching-Aktivitäten bei denen die Marken auf dem Kopf sind, auf den Modellen auf der anderen Seite und es sollte mit denen übereinstimmen , die sich beziehen zueinander. Es wird dasselbe Konzept wie ein Fremdschlüssel sein , wenn Sie diese Grenze zwischen Toyota und Harrier oder Nissan und Sony ziehen, verwendet, dass sie verwandt sind. Diese Beziehung wird also als Fremdschlüssel angesehen, was wir bisher mit dem Auto gemacht haben. Lasst uns. Springen Sie aus dem Testmodus und wechseln Sie zurück in den Erweiterungsmodus, gehen Sie in das Automodell. Ich wollte einen Fremdschlüssel einführen. Ich habe schon diese Art von Fremdschlüssel hier in Marke, ID und Auto. Also kopiere ich das nur springe rüber zum Automodell. Und dann habe ich es vorgestellt. Jetzt habe ich dieses Feld, um es wissen zu lassen, dass es mit einem Mikrofon zusammenhängen sollte. Auf die gleiche Weise. Aufgrund dieser Beziehung kann ich zu MIC gehen und es wissen lassen, dass es eine Liste von Automodellen enthält und sehen, wie das funktioniert. Da das erledigt ist, bin ich mir sicher, dass Sie es erraten haben, wir brauchen eine neue Migration. Fügen Sie also Migration hinzu, Modellbeziehung, das ist meine Botschaft. Dann bekommen wir die Migrationsdatei, die nichts Spaß macht. Wir wissen also schon, dass wir es uns ansehen können. Wir wissen nur, dass es okay ist, es tut das Richtige. Wir können die Datenbank aktualisieren und wenn das erledigt ist, können wir für unsere Modelle, Automodelle, in der Menge vorankommen . Wir müssen das Create Peytchev erweitern, eine Dropdown-Liste für den Mix. Und wir brauchen und auch den Edit, tut mir leid. Also habe ich diese Art von Code schon. Arbeiten Sie wieder schlauer, nicht härter. Also nehme ich einfach diese Formulargruppe an. Ich springe über die Automodelle und entferne tatsächlich das erstellte Datum. Sie können das Feld also einfach entfernen. Du willst es nicht auf der Seite fühlen, du entfernst es. Hier. Die Bindung wäre CAR-Modell dot make ID wurde aus Mix entnommen. Das scheint nicht zu existieren, aber das ist in Ordnung. Ich wollte das auch kopieren. Gehe zur Registerkarte „Bearbeiten“. Ich will das Erstellungsdatum nicht. Ich muss die Ausweistür behalten. Denken Sie daran, behalten Sie immer das Verborgene. Aber ich will das nicht sexuell und ich wollte nur einen Ausweis machen. Okay, dann werde ich die ersten Daten laden lassen , so dass die erste Abfrage wir ausführen, wenn wir die Daten für die Seite füllen mussten. Also springe ich einfach zu Automodellen. Ich habe die Methode benutzt, bin gegangen, um den Überschuss zu entfernen. beiden brauche ich nicht. Ich brauche nur Mikrofone. Also bin ich gegangen, um diese Immobilie zu erstellen. Alles klar. Und fügen Sie dann alle fehlenden Referenzen hinzu. Dann mache ich hier einfach meinen Lord, den ersten Datenanruf. Und ich mache das Gleiche, bevor ich die Seite zurückkehre. Und das ist alles in der Erstellung einer Senke, Art beschleunigt dies denn das sind Dinge , die wir gerade gemacht haben, und ich kopiere und füge wirklich nur den Code ein, wir bereits durchgemacht haben detailliert. Also machen wir an dieser Stelle nichts Besonderes. Es ist das Gleiche. Wir verwenden nur den Code, den wir geschrieben haben, und wir kennen die Konzepte, wenn wir das für die Abfrage tun, müssen wir das auch für die Bearbeitung tun, nämlich Into haben, es wird hier abgelegt, geblutet und generieren diese neue Immobilie. Und dann machen wir unseren Anruf, unsere Gewichtsbelastung, die Anfangsdaten. Wir haben diesen Anruf hier auch in den Toren gemacht , bevor wir den pH-Wert zurückgeben, den wir fertig sind. Wir sind damit fertig, die ID für unsere Modelle zu erstellen. Lassen Sie mich also rennen, springen Sie zu unseren Models. Und du wirst hier sehen, dass wir die Liste vom Mikrofon abholen. Wir haben das kapazitätstheoretische Modell, jemand, um Sony zu sagen. Und du bist mit Nissan verwandt. Das möchte ich nicht erstellen. Alles klar. Also werde ich einfach alle vorherigen löschen . Es klickt sie also nicht in der Mitte, öffnet sie in neuen Registerkarten, löscht. Also habe ich dieses Zeug noch nicht erweitert, die Lead-Funktionalität noch nicht. Das ist allerdings kein Problem. Es funktioniert immer noch. Also lösche. Alles klar. Oh, ich dachte, sie werden gut funktionieren, sie tun nicht, dass diese in der Löschung mit etwas in Konflikt steht und Ehemann gekündigt wurde. Und ich denke, das liegt nur daran, dass ich etwas lösche , das nicht in Ordnung sein sollte. Gelöscht. Dieser Löschfehler liegt wirklich daran, dass wir ein Auto geschaffen haben , das eine Beziehung zu diesem Bier hat , das in meinem ist. Lassen Sie mich das also aus der Migration hervorheben. Wie ich schon sagte, wann immer wir Pfeile sehen, skatere ich keine Pfeile mit den Richtlinien, weil es Zeiten gibt, in denen Sie die Konzepte lernen, ohne Arizona zu sehen , wenn Sie Arizona bekommen und viel zu tun Sie das, es ist gut zu sehen, dass die Arizona sie verstehen. Als wir die Migrationen erstellten, wurden die meisten, wenn nicht alle hinzugefügten Fremdschlüssel hinzugefügt, wobei sich der übermäßig Restrict“ bezieht. Wenn Sie mit Datenbanken nicht so vertraut sind. Was passiert, ist, dass Sie die referenzielle Aktion haben , mit der Sie entweder sagen können, wenn ich den übergeordneten Datensatz lösche, was bedeutet, dass Sie bereits ein Auto löschen. Ich brauchte nicht wie ein Automodell. Löschen Sie dann alle Autos , die diese Assoziation haben. Wenn ich eine Farbe löschen sollte, lösche ich dieses Schwarz und füge 50 Autos in die Datenbank als schwarz hinzu. Wenn du wolltest. Wenn ich Schwarz lösche, würde es alle 50 Autos als Block löschen, dann würde man eine Kaskade sehen. Kaskadierende Aktion bedeutet, alles zu löschen , was mit diesem Datensatz zusammenhängt. Was unsere Migrationen uns diese beschränken, ist der Grund , warum wir diesen Pfeil erhalten , weil er sagt, dass Sie kein Tool laden, entfernen Sie einen Datensatz mit 200 Datensätzen. Etwas verlässt sich also auf diese Akte. Ich werde also wissen, dass ich mich auf den Harrier verlassen muss, den wir haben Ich kann Harrier nicht löschen, bis ich alle Autos lösche , die Transportunternehmen sind. Also löscht Dr. Glenn alle tatsächlichen Autoaufzeichnungen, die eingestellt sind, dann Comeback und Dichte. Ja, ich wollte den Reifen machen. Das ist im Grunde das, was das sagt. Es ist ein Fehler, aber es ist nicht wirklich, wirklich ein Fehler. Das ist in Ordnung. Ich mache einfach weiter und füge neue hinzu. Ich merke, weil ich das erstellte Datum abgenommen habe, dass es standardmäßig eine Urkunde ist. Es sagt mir also nicht, dass es erforderlich ist weil es nicht auf diesem Bildschirm zu denken ist, dass es erforderlich ist, aber wenn nichts darüber bereitgestellt wird, erhält es einen Standardwert wie diesen, genau wie diesen, genau wie diesen Wenn innerhalb von T nichts angegeben ist, wird es standardmäßig auf 0 gesetzt. Das wäre Spinne. Und Spinne ist wirklich relativ zu Ferrari. Und die andere, die wir hatten, fügen wir einfach eine weitere Barriere hinzu. Und das ist Toyota oder lass mich einen anderen benutzen. Lass mich Lexoffice oder Supra benutzen. Da sind wir los. So erstellen Sie Toyota, wir haben mindestens drei Datensätze, die direkt mit Mix zusammenhängen. Eine, die immer noch ein freier Status ist. Wenn ich also zu Autos gehe und zum Erstellen gehe, wird erwartet, dass ich nicht alles in der Dropdown-Liste so sehen sollte . Wenn ich auf Toyota klicke, sollte ich nur sehen, dass Toyota sich auf Ferrari bezieht wenigstens auf Ferrari Switches und Eigentümer über die Ferrari-Modelle klicke , das erwartet der Benutzer. Offensichtlich passiert das jetzt nicht, lassen Sie uns Logik implementieren, um dem gerecht zu werden. 21. Füge Cascading Dropdown-Listen mit JQuery – Teil 1: Alles klar Leute. Als wir letztes Jahr waren, haben wir unser Formular aufgestellt und unsere Dropdown-Listen für Farben gemischter Modelle eingerichtet . Nein. Das nächste große Ticketelement ist , dass sie möchten, dass wenn sie das Mikrofon aus der Liste auswählen, automatisch die Liste der anzuzeigenden Modelle filtert . Lassen Sie uns überprüfen, was wir gerade haben. Wir haben unser Formular, dem alle Mikrofone in allen aufgeführten Modellen aufgeführt sind. Ich will also kein Loch zerreißen. Ich wechsle das Mikrofon. Wir sehen immer noch alle Modelle. Ordnung, das heißt, wenn ich mich in der Sonne entscheide, sollte es nur sonnig sein, basierend auf den Daten, die sich gerade in der Datenbank befinden Wenn ich Wildheit wähle, sollte diese Liste neu konfigurieren und nur anzeigen Spinne. Das müssen wir umsetzen. Und das Tool, das wir verwenden werden, ist JavaScript oder jQuery. Jquery hat diese Funktion namens Ajax-Sets von denen tatsächlich tun, was wir asynchrone Aufrufe nennen, teilte dem serverseitigen Code von der Clientseite mit. Mit anderen Worten, wir werden uns innerhalb des statischen HTML-Abschnitts des Pferdes befinden, aber wir werden den Service besagte Mythen treffen, die Abfrage laden, die Daten abrufen und sie dann bukkal mit dem Rückgang bringen und sagte alles in Echtzeit, lasst uns diese Party beginnen, indem wir auf unsere Create-Seite für die Autos gehen. Und was wir tun werden , ist den ID-Wert für die Modelle zu überschreiben . Wir werden auch den ID-Wert für den Mix hinzufügen. Jetzt eine kurze Erklärung. Denken Sie daran, dass der ASP-Dash Four Tag-Helfer ist , der uns beim Rendern der Seite ist , der uns beim Rendern das Namensattribut sowie das ID-Attribut gibt. Jetzt, wenn Sie diese Art von doppelten Barrel-Namen wie Auto-Punkt Meek ID haben. Die ID selbst wird als Autounterstrich Meek ID herauskommen . Ich möchte keine so komplizierte ID, also kann ich sie immer mit meiner einfachen überschreiben. Also füge ich der Mix-Dropdown-Liste ID Equals Mix hinzu. Id entspricht Modellen zu den Modellen des Kampfes. Als nächstes muss ich etwas JavaScript hinzufügen. Denken Sie daran, dass das, was wir wollen, dazu führt , dass wir beim Ändern des Mikrofon-ID-Wertes die Werte, die in der Dropdown-Liste des Modells verfügbar sind , dynamisch laden oder ändern . Ich fange in meinen Gruppen zur sexuellen Durchsetzung mit einem Script-Tag an. Denken Sie daran, dass dieser Abschnitt dafür gewidmet ist , dass ich JavaScript schreiben wollte. Erstellen Sie diesen Abschnitt immer. Und dann legen Sie Ihr Skript-Tag und dann können Sie fortfahren. Beginnen wir mit unseren Event-Handlern. Also beobachte ich in der Dropdown-Liste Mix nach einem Wertänderungsereignis. Wir haben gesehen, dass wir auf einem Button nach einem Klickereignis suchen können . So ziemlich Sie können auf jede Art von Ereignis bei jeder Art von Steuerung achten , Art des Ereignisses, das Sie verwenden möchten, der ISR relativ zu jeder Operation, die Sie ausführen. Ich möchte, dass wenn ich den ID-Wert hier oder den Meek ID-Wert ändere , etwas anderes tun wird. Ich sehe es. Achte auf mein Element mit dem ID Sumer Bone würde kein Element nach ID haben wollen. Wir sehen einen Hashtag, sehen dann den ID-Mix und sehen, wie viel einfacher das ist. Dann ist das Ereignis, auf das wir achten , ein Änderungsereignis, das sehen wird, wann der Wert geändert wird. Und dann geben wir an, dass wir diese Funktion ausführen möchten, wann immer dies passiert, um das Drehen Rot zu erhalten. Wie gesagt, eine Open-Air-Klausel für den Ruhestand von Anfang an. Und das vergesse ich nicht. Und dann zerbrechen Sie ein paar Linse und dann können wir den Code hier schreiben. Das erste, was ich in diesem Fall machen wollte , ist den Wert zu erhalten. Es hat sich geändert. Was ist der Wert Nase? Ich werde sagen, var make ID ist gleich dem. Dieses Objekt repräsentiert jedes Steuerelement das das Ereignis ausgelöst hat, diesen Punktwert. Dann möchte ich die Standardwerte innerhalb des Modells setzen. Die Lüge von hart codiert, dass das, was ich tun werde, ist es einfach aus der Auswahl zu nehmen. Also bin ich nicht schwer, es zu codieren, weil wir die Werte immer ändern werden. Was ich will, dass der HTML-Code da drin dieses Standardbit von Text ist. Also werde ich sagen, hol mir das Element nach den ID-Modellen. Denken Sie daran, wählen Sie ID-Modelle aus, geben Sie mir dieses Element und legen Sie den HTML-Code in diesem Element auf Option fest. Das wird also Angst haben, fügen Sie einfach den HTML-Code an, was auch immer das Steuerelement ist. Es wird einfach den HTML-Code hinzufügen, was auch immer Sie hier mit dem innerhalb der Tags einfügen. Jedes Mal, wenn du manipulieren wolltest, was sich in einem Tag befindet, habe ich vielleicht ein leeres Div. Wir wollen im Handumdrehen ein anderes Element hineinlegen. Genau das machen wir. Jetzt haben wir die leere Liste. Ja, es bekommt die Artikel von Modellen und ich könnte das lassen oder entfernen, weil ich bei der ersten Ladung nicht möchte dass Elemente entfernt werden, die bei jedem Ändern zumindest sollte setz diesen Standard. Html-Tag. Und dann werden wir der Ajax-Aufruf sein, um die Werte aus der Datenbank anzupassen und sie hierher zurückzubringen. das zu tun, habe ich einen Dollarzeichen-Punkt gesehen, der JSON bekommt. Dies ist also eine jQuery-Methode , mit der ich eine URL aufrufen kann. Ich wollte leere Anführungszeichen für die URL setzen . Es ermöglicht mir auch , Daten weiterzugeben. In diesem Fall muss ich die Modelle basierend auf der Mikrofon-ID, dem Parameternamen, erhalten . Das ist, ich werde diesen Mikrofon-ID-Doppelpunkt benutzen. Und der Wert und die Übergabe ist Meek ID. Dies ist also der Parametername. Dies ist der Wert, den ich beim Hervorheben bemerkt habe, er hebt auch die Variable hervor. Dies ist der Wert des Wertes , der aus dem Change-Ereignis stammt . Das übergebe ich auf diese Methode. Dann habe ich ein Komma, und dann sagt diese Funktion im Grunde, wenn es erfolgreich ist, werde ich das tun. Und es braucht, oder es hat Fähigkeit, einen Parameter namens zu nehmen, ich nenne es Daten. Daten hier würden alles darstellen, was vom serverseitigen Aufruf zurückkam Die Daten hier würden alles darstellen, was vom serverseitigen Aufruf zurückkam. Ich lasse diese Shell von einer Funktion hier. In diesem Bereich werden wir mit der Magie zu tun haben, den Hang zu füllen. Aber das ist die grundlegende Vorlage. Wir haben also eine URL, welche von ihnen ablegt, wo der Make-ID-Wert übergeben wird, der verwendet wird, um die Liste der Modelle zu filtern. Wenn wir es dann bekommen, aber dann selbst modelliert sie, werden wir die Aktion in diesem Bereich umsetzen. Ich habe hier ein bisschen innehalten. Und ich gehe zur Codedatei für dieses Erstellen. Und was wir hier einsetzen müssen, ist eine Methode, die tatsächlich aufgerufen wird, wenn das Änderungsereignis eintritt. Denken Sie also daran, dass Ajax uns erlaubt, Service zu leisten. Ich hatte Anrufe vom clientseitigen Code. Hier. Ich lege das ein, was wir es als einen anderen Handler bezeichnen. Denken Sie also daran, dass diese Methoden Handler genannt werden. Und das wird JSON-Ergebnisse sein. Public AsyncTask gibt JSON-Ergebnis zurück. Und das wird los sein, gleich. Denken Sie also daran, dass ich gesagt habe, dass Sie bei get haben, das ist ein Schlüsselwort für Post, Das ist ein Schlüsselwort. Wenn wir eine benutzerdefinierte 100 wollen, sage ich es auf Git. Und nennen wir diese Modelle, oder Sie können es sogar als mobilisiertes Auto bezeichnen, wenn Sie explizit sein möchten. Also, um Automodelle zu bekommen, benötigt dies eine ganze Zahl , die Meek ID wäre. Das ist der Parameter, den wir sehen , den wir senden werden. Wir müssen diesen Wert innerhalb des Parameters dort erhalten . Dann muss diese Methode ein JSON-Ergebnis zurückgeben. Warum müssen wir die Abfrage ausführen? Und zweitens müssen wir uns darum kümmern , einige Ergebnisse zu erzielen. Wir können es in einer Zeile machen, ich mache es in zwei, nur um zu zeigen, dass VAR-Modelle den Kontext-Punkt-Automodellen entsprechen . Und dann ist es einfach genug , es aufzulisten. Sie sehen also, dass die Asynchrone der beiden Listen einfach jede einzelne Sache in der Liste zurückgeben wird, was wir hier gemacht haben, aber das ist nicht unbedingt das, was wir wollen. Wir wollen, dass es gefiltert wird. Also muss ich injizieren, was wir es als Bedingung oder Where-Klausel bezeichnen . Ich muss Punkt wo sagen. Dann setzen wir unseren Lambda-Ausdruck ein. Also q ist dieses Mal mein Token. Und ich habe gesehen, wo die Spalte der MC-ID mit dem Wert übereinstimmt , der durch den Parameter übergeben wurde. Nachdem wir all das erreicht haben, sage ich einfach , gebe ein neues JSON-Ergebnis mit den Daten von Modulen zurück . Was dies tun wird, ist tatsächlich alle Datenbankobjekte, die Daten aus dem Datenbankspeicher anstelle von Modellen zu nehmen . Und dann wird das alles in Form von Folk namens JSON zurückgeben . Das beschwert sich, weil ich es muss, ich warte auf den Aufruf dieser Methode. Nein, ich habe eine Vorstellung von dem Pfad, den ich aufrufen muss , um die Daten zurück zum JavaScript zu bekommen Ich kann jetzt GetJson, Ihre URL oder den Pfad, den Sie aufrufen sollten, sagen . Es wäre Slash-Autos, Schrägstrich erstellen. Ich schätze, das sieht vertraut aus. Es ist Karteikarten wären der Autoordner, der Schrägstrich erstellt wird, wäre unsere Create-Datei, aber unsere Create-Datei- oder Erstellungsmethode, die On Git und die On-Post hat auch Automodelle. Und das ist unser Handler für diese Situation. Also muss ich es sehen. Ein Schrägstrich Jungs Slash Create. Dann gebe ich eine Abfragezeichenfolge in der URL ein, um zu sehen, dass der Handler, den Sie auf der Create Page aufrufen werden, den Fahrzeugmodellen entspricht. Beachten Sie die Namenskonvention hier drüben. Es heißt „On get“. Das ist ein Schlüsselwort, das ist ein wichtiger Ausdruck, nach dem Razor-Seiten sucht, aber die Methode selbst heißt Automodelle. Ich sehe, dass Ihr Handler Automodelle ist, also muss ich nicht die Gitarre anziehen, den OnPause-Teil. Ich sehe gerade sogenannte Automodelle. Nachdem wir all das getan haben, haben wir die URL festgelegt und wir haben die Daten oder zumindest was als Parameter möglich sein muss , von dem wir erwarten werden. Aber diese Daten, was ich tun werde, sind die Daten zu durchlaufen und die Dropdown-Liste manuell auszufüllen . Der Grund, warum ich diese Zeile eingefügt hätte, ist, dass ich jedes Mal, wenn ich tatsächlich die gemischte Dropdown-Liste mache, zurücksetzen möchte. Wenn Sie also einfach diese Zeile aufrufen, leeren den gesamten HTML-Code und es wird nur das sitzen, was ich hier als HTML angegeben habe. Nein, ich muss mich an die Daten anpassen. Aber im Rest des HTML ist der Dollarzeichenpunkt jeweils eine Möglichkeit, ist der Dollarzeichenpunkt jeweils die ich für jeden in JavaScript sehen werde. Und die Sammlung würde hier variabler kommen , Daten. Daten stellen also das neue JSON-Ergebnis dar , das zurückgegeben wird. Für jeden. Grundsätzlich führen Objekte in den Daten diese Funktion aus, wo ich einen Schlüssel bekomme und nennen wir ihn einen Wert, einen Schlüssel und einen Wert. Und dann öffnen und schließen wir das und Semikolon. Also vergesse ich es nicht. Bei dieser forEach-Methode werde ich im Grunde nur definieren, wie eine Option aussehen soll. Die Option var ist also gleich und ich werde die Dollarzeichen-Option sehen. Also Dollarzeichen, Option Klammer öffnen, Eingeweide öffnen Sie genau wie das Tag. Also wollen wir das Upsilon-Tag dort haben. Ich füge ein Attribut hinzu. Denken Sie also daran, dass ein Attribut, das für eine Dropdown-Option sehr wichtig ist , der Wert ist. Ich füge dieses Attribut hinzu und werde ihm sagen, dass es Wert ist der Wert Punkt d. es Wert ist der Wert Punkt d. Denken Sie daran, dass, wenn dies die Liste der Modelle oder eine Modelltabelle zurückgibt Modelle oder eine Modelltabelle , uns die ID mit freundlicher Genehmigung der Vererbung der Basisdomänen-Entität zurückgeben wird, auch Wodka-Namen gibt. Ja, es wird über Meek ID und Liste der Autos angegeben. Das ist in Ordnung, aber wir brauchen diese wirklich die ID für den Wert und den Namen für die Anzeige. Ich kann daraus schließen, dass das JSON-Ergebnis, das uns nur Ergebnisse derselben oder das Ergebnis einer Reihe von Objekten derselben Klasse zurückgibt uns nur Ergebnisse derselben oder das Ergebnis einer Reihe von Objekten , die wir uns gerade angesehen haben. Es wird definitiv den Wertabschnitt haben , ein ID-Feld. Und dann fügte ich Punkt hinzu txt sei der Wertname für jede Option, für jeden Wert oder jedes Ding, das durch die Daten zurückkam. Holen Sie sich den Wert. Erstellen Sie dann eine Option , bei der Sie den Wert als Attribut und Text eingeben , der sich zwischen Öffnen und Schließen befand. Der Abschnitt mit der Aufschrift „Modell auswählen“ , der als gültiger Name bezeichnet wird. Nachdem ich eine Option erstellt habe, wäre es das nächste, sie anzuhängen. Ich werde nur sehen, wie Modelle angehängt werden, aber einfach Option anhängen. Also append wissen wird zum Ende dessen beitragen, was da drin ist. Wenn ich also dot HTML sage, wird es leer Totally wird es auf den Wert zurücksetzen , den ich hier will. Wenn ich es leer haben wollte, könnte ich einfach sagen, dass dein HTML nicht leer ist. Dein Ischium, es gibt keine Adoption. In diesem Fall möchte ich die Toiletten jedoch nicht reinigen. Es wurde bereits mit der Standardeinstellung bereinigt . Nein, ich wollte nur die anderen Optionen anhängen , die Standardeinstellung. Jetzt, da alles erledigt ist, werde ich hier eine kleine Methode einführen, die ich zum Debuggen namens console.log verwende. Wann immer Sie versuchen, Ihr JavaScript oder jQuery durchzuführen , und nicht ganz sicher, ob das, was Sie tun, funktioniert oder welche Werte übergeben werden, festgelegt werden. Sie können immer eine console.log ausführen, die im Konsolenbereich Ihres Browsers gedruckt wird und Ihnen zeigt, was Sie drucken. Also habe ich ein Konsolenprotokoll für die Meek-ID erstellt, nur um sicherzustellen, dass wir Wert des Einkaufswagens erreichen, wenn es eine Änderung gibt. Und ich werde auch die Konsolenprotokollierung der Daten genau hier durchführen , wenn der JSON-Anruf erfolgreich ist. Denn dann wirst du sehen, wie JSON wirklich aussieht wenn du nicht ganz vertraut bist. Worüber ich spreche, wenn ich Jason sehe, lassen Sie uns sagen, dass es eine Aldose ist, um F5 zu kontrollieren, oder besser gesagt, dass ich es im Debug-Modus mache, setze hier einen Haltepunkt damit wir genau sehen können wann diese Methode heißt. Wir können weitermachen und ein besseres Verständnis dafür bekommen , wie Ajax funktioniert. In Ordnung, also sind wir auf der Seite Millenia, siehe hier eins, es gibt nichts in dieser Dropdown-Liste, weil wir unsere ASB-Elemente daraus entfernt haben. Also ASP Artikel, also das Mikrofon, aber für die Modelle Es gibt keine ASP-Artikel. Obwohl wir die Datenbank im Hintergrund aufrufen und Anfangsdaten laden, haben wir ihr nicht gesagt, woher sie ihre Reaktanten beziehen sollte . Wir haben auch die Standardoption aus dieser verknüpften Liste entfernt. Also bekommen wir eine leere Dropdown-Liste. Make ist in Ordnung. Wenn ich jetzt auf Toyota klicke, schau dir an, was passiert, springe zu meinem Breakpoint. Das bedeutet, dass der Ajax-Aufruf den Handler erfolgreich findet. Ich springe einfach zur letzten Zeile , damit wir sehen können, was in Modellen enthalten ist. Sie sehen hier, das heißt, es hat tatsächlich das eine Toyota-Modell , das sich in der Datenbank befindet. Das sind alle Daten, die alles in der Datenbank zurückgeben. Wir könnten dies also ein bisschen weiter verfeinern, weil wir all diese Dinge wirklich nicht brauchen. Wir brauchen wirklich nur die Mikrofon-ID und den Namen. Okay, aber das ist in Ordnung. Lass uns einfach weitermachen und weitermachen oder tut uns leid, wir brauchen nur den Ausweis und das Knie. Wir müssen uns nicht entschuldigen, wenn ich gerade F5 drücke und erlaube, dass es weitergeht. Jetzt sehen Sie, dass der Standardtext geladen wird. Eins unverändert. Es ging weiter und stellte den HTML-Code ein. Und dann zwei hat es den Ajax-Anruf gemacht, der dann dieses Zeug abruft. Das heißt, unter dem ich sehen werde , dass Supra weiß, wann ich über das Konsolenprotokoll spreche, wenn Sie mit der rechten Maustaste klicken, gehen Sie zu Element prüfen oder wenn 12 heizen und auf Konsole klicken, dann sehen Sie tatsächlich die Konsole. Es werden Nachrichten hier gedruckt. Dies ist ein Fehler beim Versuch, die Schriftart tolle Sachen zu laden. Das ist an dieser Stelle also winzig, was Sie hier sehen, dass die Konsole die Mikrofonideen protokolliert. Erstens, wenn ich das in Nissan ändere, siehst du, dass es Tool ist. Wenn ich es wieder in Toyota ändere, ist jeder einzelne. Jedes Mal, wenn wir die Änderung vorgenommen haben, protokollieren wir die Konsolenprotokollierung, wir können sehen, welcher Wert gewählt wird. Darunter. Sie werden feststellen, dass ich viel komplexer aussehendes Konstrukt bin und so sieht JSON wirklich aus. Wenn ich das erweitere , nennen wir das ein JSON-Objekt. Json ist JavaScript Object Notation, die ein sehr, sehr beliebter Standard für den Transport von Daten über das Web ist, http derzeit. In diesem Fall wurde es getan, alle Daten aus der Klasse zu nehmen und in Schlüssel-Wert-Paare zu serialisieren . Also der Name des Feldes und der Wert, den das Feld wir haben würden. Deshalb sehen Sie Name mit dem Wert Meek ID mit dem Wert make und so weiter. Es ist also die gleiche Art von Einschränkung, die wir gerade hier benutzt haben, als wir den Anruf getätigt haben, das ist diese. Beachten Sie den Schlüssel oder einen Parameter-Doppelpunkt. Und der Wert, seit ich eine Variable verwende, aber in diesem Fall ist in den Literalwerten entstanden. Nachdem wir dieses Objekt aus dem Ajax-Aufruf erhalten haben, können wir wissen, dass Sie einfach auf die einzelnen Werte oder Werte mit ihren Schlüsseln zugreifen . Es ist ein Objekt und es ist auch wie ein Array. Es ist ein Array dieser JSON-Objekte. Wenn ich mehrere hätte, sag dir, dass es im System der Fall ist. Lassen Sie mich also einfach rübergehen und noch ein paar Modelle erstellen. Ich habe gerade zwei weitere Toyota's im System erstellt. Also schau dir an, was passiert, wenn ich dich berühre, antwortete Nissan, aber ich ändere Geld in Toyota-Norm , da es drei Toyota's im System gibt. Ich habe nicht innegehalten oder irgendetwas wörtlich, ich bin einfach rübergegangen und habe sie erstellt. Es gibt keine in der Datenbank. Jedes Mal, wenn es die Notwendigkeit hat, beschäftigt zu wird es die neuesten Werte zurückbekommen. Und es gibt JSON-Objekte. Wir sehen also jedes der Autos in seiner eigenen JSON-Darstellung und wird genau hier in der Dropdown-Liste dargestellt. Das nennen wir also eine kaskadierende Dropdown-Liste. Die Personen, die diese Funktion angefordert hatten, wussten nicht , dass sie eine kaskadierende Dropdown-Liste wollten. Sie würden sicherlich nicht den Aufwand schätzen, der mit der Schaffung eines solchen Konstrukts verbunden ist. Als Entwickler werden wir jedoch immer die Anforderungen erhalten und es liegt an uns, die beste Lösung zu finden. In diesem Fall war jQuery die einfachste Lösung für etwas, das, wie gesagt, jQuery oder JavaScript. Das ist nicht etwas, das Sie immer unbedingt schreiben werden , aber es ist definitiv nützlich , wenn Sie bestimmte Situationen haben , die schnelle und saubere Lösungen benötigen. zu bereinigen, werde ich diese Konsolenprotokolle einfach entfernen weil sie wirklich zu Debugging-Zwecken dienen. Du willst sie nicht in deinem Code belassen. Denn wenn Ihre Anwendung Öffentlichkeit geht oder der Biber sie möglicherweise sieht und Insiderinformationen oder potenziell sensible Informationen in seinem eigenen Browser abrufen wollte , protokolliert sich die Konsole für Ihre Website. Das willst du nicht. Nachdem du Daniel debuggt hast, repariere es und weißt du, es funktioniert. Sie können Ihre console.logs immer entfernen . Das ist es wirklich. Also eine weitere Aufräumaktivität oder ein paar Bereinigungsaktivitäten, beginnend mit der FID , dass ich wirklich möchte , dass dies zu jeder Zeit vorhanden ist. Was ich also tun würde, ist dies auch zu replizieren. Und selbst dann könntest du es in eine Methode setzen. Aber was ich tun werde, ist, dies außerhalb unserer Mix-Change-Funktion zu stellen . Das heißt, sobald die Seite geladen wird, werden wir diese Option immer sitzen. Das ist eine Option. Die andere Option ist , dass wir es einfach zurücklegen , wenn die Seite geladen wird. Wir haben hier nur die Standardoption , die besagt Modell auswählen. Aber natürlich hat es keine ASP-Artikel, also ist es leer. Das ist die einzige Option , die es geben würde. In jedem Fall, wenn Sie sich ändern, wird dieser Wert immer vor dem Anhängen der Werte aus der Datenbank angezeigt. Nein, außerhalb davon sich eine weitere Säuberung, die ich wünschen würde befindet sich eine weitere Säuberung, die ich wünschen würde, in den ersten Daten des Herrn. Ich muss die Models nicht anrufen. Wenn ich sie dynamisch lade, muss ich diese Abfrage nicht aufrufen , wenn die Seite geladen wird. Das ist also eine Listenabfrage im Voraus. Und das wird nur zu einer schnapperen niedrigen Zeit führen. Wir haben das alles im Create gemacht. Lassen Sie uns einfach weitermachen und dieselben Änderungen im Update vornehmen. Und dann kann es hier wieder etwas knifflig werden. Werde ich das alles wiederholen? Was würden wir also gerade dazu geneigt sein, dies einfach zu kopieren, zu aktualisieren und diese zu kopieren, tut mir leid, diese JSON-Ergebnismethode und in optimistisch umzusetzen. Ich stimme zu, dass diese JSON-Ergebnismethode vielleicht dupliziert werden muss. Okay, das kann ich akzeptieren. Aber wenn wir zurückkommen, werden wir uns ansehen, wie wir den Code am besten zwischen den Updates und dem Create teilen können, so dass es bei Wartungsbedarf erneut eine oder sehr wenige gibt Anlaufstellen und damit langfristig den Wartungsaufwand reduzieren . 22. Füge Cascading Dropdown-Listen mit JQuery – Teil 2: Und wir sind zurück. In dieser Lektion werden wir also unser Update ändern , um die Dropdown-Liste kaskadieren zu können. Und was wir nicht tun wollen, ist all diesen Code zwischen den beiden Ansichten zu wiederholen diesen Code zwischen den beiden Ansichten denn lasst uns einfach Truck machen. Wir haben die Dropdown-Liste des Modells zu niedrig , um sie jedes Mal wieder aufzufüllen Wert des eigenen Listenwerts des Mikrofons geändert wird. Dies wird auf der Seite „Erstellen“ erhalten. Und das muss auch für die Update-Seite weitergehen , da es so ziemlich dieselbe Form ist, genauso wie erwartet. Jetzt hat der Update-pH-Wert eine zusätzliche Anforderung , bei der wir sehen, dass wir das Mikrofon haben und dieser Wert bereits angegeben wird , wenn wir ein Auto zum Aktualisieren oder Bearbeiten auswählen, ein Auto auswählen würden. Der pH-Wert oder dieses Aktualisierungsformular wird mit allen Werten für das Auto geladen. Es wird mit einem Wert für das Mikrofon geladen. Aber dann wird diese Dropdown-Liste standardmäßig leer sein. Denken Sie also daran, dass wir uns bewegen, die Gegenstände müssen dynamisch geladen werden. Und ich möchte auch sicherstellen, dass es mit den, nur den Modellen geladen ist . Das ist unser Verwandter zu dem ausgewählten Mikrofon. Wenn das also Toyota war, sollte ich die Toyota-Werte nur sehen , wenn die Bearbeitungsseite geladen wird. Das ist also eine weitere Änderung , die wir sicherstellen müssen, dass wir berücksichtigen müssen, wenn wir unseren Code schreiben , um dieses Skript freizugeben. Erstens müssen wir es in eine eigene Akte legen. Und wir haben darüber gesprochen, dass aus den früheren Tagen, als wir mit mir über Cold gesprochen haben, das JavaScript über mehrere Dateien oder Seiten teilbar ist, oder? Das gleiche Konzept gilt also hier. Was wir tun werden, ist zu unserem Dub, Dub, Dub Root zu gehen. In unserem JS-Ordner klicke ich einfach mit der rechten Maustaste. Und ich werde es tun, wenn ich eine neue JS-Datei habe, also füge einfach Neues Element hinzu. Und ehrlich gesagt wähle ich hier normalerweise etwas aus weil ich die Dateierweiterung gleichzeitig kenne. Anstatt zu versuchen, genau den einen zu finden. Und du kannst einfach hier suchen und du kannst JavaScript sehen. Sie erhalten also JavaScript-Datei. Das ist okay. Aber letztendlich wollen Sie etwas mit der Erweiterung dot js. Wir nennen dieses eine kaskadierende Models-Skript. Ratet mal ein Witz. Entschuldigung, lassen Sie mich das Dropdown-Listen-Skript meines sich drehenden roten Kaskadierungsmodells besorgen. Also nenne ich das explizit, weil ich möchte, dass es sehr klar ist, was die Skriptdatei haben wird. Dropdown-Listenskript des Modells kaskadieren. Drücken Sie die Eingabetaste, und dann wird diese Datei für uns generiert. Diese letzte Spalte ist leer. Wenn Sie ihnen eine andere Vorlage verwenden, reinigen Sie einfach alles, ändern Sie je weiter. Das Wichtigste ist, dass es den Punkt JS als Dateierweiterung hat . Wissen Sie, was ich tun werde, ist all das zu nehmen, zu beschichten, und dann füge ich es einfach in unsere GIS-Dateien ein. Das ist also einfach genug und sie wissen, dass wir die JS-Datei haben. Was wir auf den Creates - und Update-Seiten tun werden, besteht darin, das Skripttag durch die SRC-Komponente zu ersetzen. Es heißt nur, dass Script SRC einer Intelligenz entspricht , die Ihnen hilft, sie auszufüllen. Sie steuern einfach gezielt keine Aufforderung. Slash Cascade Dropdown-Liste des Cascading Modells script.js. Sie können das einfach kopieren und sicherstellen, dass Sie es an einer ähnlichen Stelle auf der Updateseite ablegen . Beachten Sie, da die meisten Modi keine Kunst für Quito zum Update-Vorgang erstellen . Wir müssen sicherstellen , dass das Aktualisierungsformular genauso aussieht wie das Erstellungsformular. Ein Teil davon besteht darin, sicherzustellen , dass die gleichen Steuerelemente vorhanden sind, die entsprechenden Steuerelemente haben dieselben ID-Werte wie im Create-Formular. Ein Update stellt sicher, dass der Mix ID entspricht Mix. Und stellen Sie sicher, dass das Modell ID gleich Modellen hat. Habe gerade diese Änderungen vorgenommen. Und dann lasst uns wieder zur JS-Datei springen und dann weitermachen oder arbeiten. Jetzt ein paar Dinge zu beachten. Eins, ja, wenn wir kreieren, ist es in Ordnung, weil wir gesehen haben, dass es funktioniert. Alles beginnt mit den Standardwerten. Und wenn wir dann den Mix ändern, wird erwartet, dass wir die neuen Werte anpassen. Es kennt den Weg. Wir müssen den Puffer also nicht ändern, da er bereits auf der Seite Erstellen vorhanden ist. Die Updates können tatsächlich denselben Pfad in den gesamten JSON-Dateianfragen oder anderen aufrufen . Und das sollte in Ordnung sein. Wir müssen keines dieser konkreten Dinge ändern. Wir müssen jedoch bedenken, dass, wenn das Formular nicht leer ist, wie im Falle eines Updates, Voraus eine Mikrofon-ID vorhanden sein wird. Mit dieser Make-ID müssen wir sicherstellen, dass wir diese Liste im Voraus füllen. Wir können es kaum erwarten, bis das Änderungsereignis bei einem Update diese Werte vorhanden ist. Das sind zwei Faktoren. Ein weiterer Faktor ist, dass wir sicherstellen müssen , dass der Wert, der vom Benutzer bei seiner Erstellung ausgewählt wurde. Das Fahrzeug ist der Wert , der dargestellt wird. Während wir also alle Optionen ausfüllen, wie wir vielleicht Toyota haben, haben wir vier Möglichkeiten für Toyota. Nur einer von ihnen wurde wirklich ausgewählt. Wir müssen sicherstellen , dass dies sie sichtbar ist. Wie wir auf der Update-Seite gesehen haben, zeigt die Dropdown-Liste immer den Wert an, während der Erstellung ausgewählt wurde. Wir müssen also sicherstellen, dass wir diese Art von Logik hier mit ein paar Optimierungen replizieren . Was wir tun werden, ist diese Erklärung von Meek ID zu nehmen. Ich werde es über den Umfang der Veranstaltung stellen. Das Ereignis passiert hier, macht keine geänderte Funktion. Diese Funktion ist unsere Veranstaltung. Ich werde keine ID machen, um global zu diesem Byte zu sein. also diese Deklaration ganz oben in der Datei ausführen , ohne dass Klammern gehören oder irgendetwas, weil unser Umfang wirklich offen ist und schließt , dass Ereignisfunktionsstörungen in diesem Rahmen liegen change event, weil die Klammer hier öffnet und hier geschlossen wird und alles darin in seinem Umfang liegt. also diesen alten Satz von setzen, gibt es keine Bereiche, die diese Variable besitzen. Jede Funktion und jedes zweite Stück Code, das wir schreiben, kann nach Belieben darauf zugreifen. Das ist also in Ordnung. Jetzt, da wir das getan haben, müssen wir dieses wiederverwendbare tun. Im Moment ist es also an das Vertrauen des Change-Ereignisses gebunden . Ich möchte nicht, dass es nur aufgerufen wird , wenn es ein Change-Event gibt. Ich wollte automatisch aufgerufen werden , wenn es ein Lastereignis gibt. Was ich auch tun werde , ist das zu schneiden. Und unter dem Change-Ereignis werde ich eine benutzerdefinierte Funktion erstellen, lesen Sie einfach die Lord-Funktion. Und wir nennen es einfach Lord Models. Ich gebe ihm nur einen Namen. Sie können tun, was es für uns tun wird. Und wir werden einfach „Einfügen“ sagen. Jetzt, da dies in einer Methode ist, kann ich es so gut nennen, damit ich sehen kann, wann immer dies geändert wird, ich möchte Modelle laden, bevor ich Modelle laden kann, aber ich muss den neuen Wert von Meek ID erhalten. Also optimieren wir nur hier. Denken Sie daran, dass sich dieses Objekt wirklich auf alles bezieht, was das Ereignis auslöst. Nun, das ist außerhalb der Ereignisse, also kann es nicht so sein, solange wir hier sind. Also kopiere ich diese Zeile und sehe, wann dieses Ereignis ausgelöst wird, den Wert dieses Steuerelements, das es ausgelöst hat, und dann kann alles andere fließen. Kein Problem. Wenn es jedoch global ist und danach manuell deklariert wird, sagen Sie mir das Steuerelement mit dem ID-Mix und holen Sie mir die Werte. Also weise ich nur auf diese hin , basierend darauf, wo Sie dieselben Codezeilen machen , die Art und Weise, wie Sie darauf zugreifen, müsste anders sein. Ich meine, wir hätten innerhalb des gezeigten Formulars so darauf zugreifen können, also wäre das kein Problem. Ich zeige Ihnen nur, wie Sie die Syntax auf verschiedene Arten wiederverwenden können. Also müssen wir hier mit seinem Namen darauf zugreifen, aber dann haben wir eine Auswahl innerhalb unseres Klickereignisses. Mit diesen Änderungen bin ich also nicht Lindsay weiter gehen. Ich werde einfach testen und sicherstellen, dass die Stahlwerke erstellen, wenn wir es heben. ich das Create teste, werde ich den Toyota ändern und ich sehe immer noch Toyotas kommen, Ferrari's. Also funktioniert alles im Create. Mit diesen kleinen Optimierungen haben wir also Routine und alle Funktionen, die wir beim letzten Mal übrig hätten. Keine Probleme. So funktioniert Create immer noch, räumte einige meiner Aufzeichnungen aus, besonders diejenigen mit unseren finanzierten Modellen und so weiter. Ich habe gerade die Datenbank davon aufgeräumt , also gehe wieder hinein. Also nein, das Ziel wäre, dass Ferrari kommt, wenn wir auf Bearbeiten klicken . Aber was wir nicht sehen unsere beiden Modelle oder die Tatsache, dass es Spinne war. Denken Sie daran, Ferrari-Spinnenblock. Wenn wir auf Bearbeiten klicken, sehen wir für RT, wir sehen Schwarz, aber wir sehen keine Spinne, wir sehen hier keine Werte. Das muss also automatisch geschehen. Natürlich wird es passieren, wenn ich das Änderungsereignis mache, aber wir wollen nicht auf die Änderung von n warten müssen , damit dies geschieht. Lassen Sie uns den Code entsprechend ändern. Und was wir tun werden, ist Lord Models anzurufen. An fängt an. Sobald das Skript geladen ist, möchten wir die Modelle automatisch in eins laden die Mekka-ID abrufen. Wenn die Bearbeitungsseite geladen wird, erhält dieses Skript den Wert hier. Dann würden Load-Modelle sagen, gehen Sie weiter und erfüllen Sie die JSON-Richtlinie in der Micaiah-Idee und erhalten Sie die Optionen. Alles klar, also lass mich einfach die Distanz sehen , ob das einen Unterschied gemacht hat. Wir aktualisieren einfach die Seite. Und wenn du nachsiehst, lass mich einfach wieder auffrischen diese aktualisieren richtig. Also erfrische ich nur für Aris geladen und wenn du hinsiehst, siehst du Spinne in der Liste. Existiert. Ähnlich für den Toyota, wenn ich einfach auf Bearbeiten klicke, während es Modell auswählen heißt , hat es alle in der Liste. Zumindest funktioniert dieser Teil. Nein, wir mussten sicherstellen , dass wir beim Laden der Dropdown-Liste die richtige auswählen . Hier ist eine coole Möglichkeit , den Wert, der durch unsere Bindung und von der Serviceseite über unser clientseitiges Skript kommt und von der Serviceseite über , weitergeben und es dann verwenden, um unsere Entscheidung zu informieren. In diesem Script-Tag können wir hier Wertparameter übergeben. Ich sage, dass die Modul-ID gleich ist. Und dann in Anführungszeichen Ausgabe, um Zeichen hinzuzufügen, Modellpunkt-Auto-Punkt-Auto-Modell-ID. Genau hier. Ich übergebe gerade unseren Parameter wenn Sie dieses Skript aufrufen, erfüllen Sie diesen verfügbaren Wert. Und so sollte es heißen. Nett und cool. Das At-Zeichen wird also wieder als Teil der Razor-Syntax verwendet, wenn Sie es sehen So können wir auf C-Sharp zugreifen. Sie können das bei sign verwenden und wenn Anweisungen hier für lose, was auch immer es ist, wir haben es an mehreren Stellen gesehen, aber so können wir es tatsächlich zu unserem eigenen Vorteil nutzen. Wir wollen alle Werte dort und mischen sie mit der standardmäßigen JavaScript-Syntax ein. Die JavaScript-Datei selbst kennen. Was ich tun kann, ist zu sagen, dass die VD-Modell-ID gleich dem Dokument ist ein statisches Schlüsselwort , das dieses Dokument darstellt, in dem ich mich befinde, oder das Dokument, also die Seite. Was wir immer document.ready sagen, wenn wir unser JavaScript oder jQuery initialisieren möchten, dokumentieren Sie das aktuelle Punktskript und erhalten Sie Attribute. Attribute würden diesen Parameter also darstellen. Wir nennen es beim Namen. Wir sehen dieses Attribut und speichern jeden möglichen Wert mit diesem Attribut innerhalb der Modell-ID. Dann führte ich unter der Option eine if-Anweisung ein, führte ich unter der Option eine if-Anweisung ein die besagt, ob der Wert Punkt ID ist. Denken Sie also daran, wenn wir alle Autos als Daten oder vom JSON-Anruf bekommen . Dies führt die Abfrage gegen die Meek-ID aus und gibt dann alles in Form der sphärischen aufgerufenen Daten zurück. Dann durchlaufen wir Daten und sehen, gib mir jedes Schlüssel- und Wertepaar. Schlüssel wäre der Name und wertet ab, was wir wirklich wollen. Erstellt eine Optionsvariable, die ein HTML-Option-Tag mit dem Attributwert darstellt ein HTML-Option-Tag mit dem , der in der Valley Dot-ID gespeichert ist. Und nimmt an, das zeigt den Namen, der mit diesem Wertschlüssel-Peer vorbeikam . Dann sehe ich, ob die ID der aktuellen Option, die Sie erstellen, ob die Idee des Kerns , den Sie bewerten , oder anders viel die Modell-ID ist. Fügen Sie dann diese Option eine Eigenschaft hinzu, geben Sie ihr den ausgewählten Namen und wählen Sie. Prop, ein ATTR oder Attribut kann also sehr ähnlich aussehen. Sie machen das Gleiche, aber ich zeige Ihnen nur verschiedene Möglichkeiten, wie Sie ähnlichen Code schreiben können. Hier. Ich sage nur, Option diese Eigenschaft, Add Selected true. Dann machen wir weiter und hängen es an. Mit diesen vorgenommenen Änderungen. Ich speichere einfach alles und dann können wir wieder zu unserer Bearbeitung springen und wir werden es identifizieren, aktualisieren, aktualisieren sich selbst und Sitzplätze funktionieren. Ich ging zurück zur List Toyota Supra. Wenn ich auf Bearbeiten klicke, wird super automatisch geladen, obwohl die Liste voll ist, supra ist diejenige, die ausgewählt ist. Wenn ich zurück gehe, denn unsere Spinne ist so in die, zeig mir Spinne. So ging es Fichte alle Modelle aus dem JavaScript und bewertete sie dann und sah das, dass einer der ausgewählt wurde. Wenn ich nur ein Inspect-Element mache, sehen Sie bei dieser Option, dass der Wert gekauft wurde , den die Eigenschaft ausgewählt hat , um es auszuwählen weshalb es nach oben geschoben ist. Okay, das ist im Grunde alles, was wir tun müssen, damit unsere kaskadierende Dropdown-Liste sowohl für das Erstellen als auch für das Update im Allgemeinen funktioniert sowohl für das Erstellen als auch für das Update im Allgemeinen ist das Konzept dahinter, ich denke, dass ich auf seine fallen gelassen werde wenn Sie ein System verwenden, bei dem Sie eine Option auswählen , und diese Option beeinflusst den Rest des Formulars oder den Rest der Optionen. Das ist alles, was sie tun. Sie schauen zu sehen. Haben Sie den Wert in dieser Dropdown-Liste geändert? Ephesus trägt all diese Befehle. Diese Befehle könnten Teile ausblenden und Elemente des Formulars ausblenden. In unserem Fall ordnen wir die Elemente eines anderen Teils des Formulars komplett neu an. Was auch immer du tun musst. Es ist genau hier an Ihren Fingerspitzen. Diese Dinge sind da, Kanada schwer auswendig zu lernen und wenn Sie es nicht oft benutzen, haben Sie es möglicherweise nicht unbedingt bei schnellem, schnellem Feuer. Erinnern Sie sich jedes Mal, wenn Sie etwas tun müssen , aber die Realität ist, dass Sie, sobald Sie das Konzept des ganzen JavaScript verstanden haben, dynamische Webseiten zu treffen und halten, die sie in Richtung bringen können verwirklichen Sie Ihre Idee oder eine Vision für eine Seite oder ein Formular oder was auch immer es ist. Sie müssen nur dorthin gehen und HomeAway recherchieren, dies tun und in kleinere Aufgaben aufteilen. Ja, es war eine große Aufgabe. man darüber nachdenkt, dass alles, was darauf fallen gelassen hat, wird die Risiken verändern. Aber wir könnten leicht aufzählen und sagen: Okay, welche Szenarien müssen wir berücksichtigen? Wen habe ich Kegel für dieses Szenario? Szenario Nummer eins, Optionen müssen jederzeit verfügbar sein. Für die Bearbeitung. Und vier zu erstellen, verlassen sich beide auf denselben Code. Anstatt diese beiden Stellen zu schreiben, lege ich es einfach in eine Methode ein und nenne die Methode zwei Stellen. Etwas ändert also ein Bolzenloch, das wir formulieren werden, oder Optionen oder so, wo Sie nur das Chines-Loch treffen müssen, bitte. sind also Dinge, die Sie nur mit Übung und Exposition haben, es wird natürlich und zur zweiten Natur für Sie. 23. Daten-Label: In Ordnung, also nähern wir uns dem Ende der grundlegenden Teile der Anwendung. Wir haben ein Rohöl eingerichtet, wir haben ein paar coole JavaScript-Sachen gemacht. Nein, es geht wirklich nur darum, die Anwendung zu verschönern. Das erste tragbare, das diese Anwendung für mich verschönert , wäre das Befestigen der Etiketten. Also haben wir uns irgendwie bemüht, sicherzustellen, dass diese Etiketten richtig auf der Liste der Autos stehen. Aber wenn wir uns gemischte Modelle ansehen, werden Farben nur den Namen des Mikrofons anzeigen. Und wenn man sich andere anschaut, sehen Sie sowohl das erstellte Datum als auch auf den Farben. Also möchte ich das wahrscheinlich entweder beheben, es abstandsfähig machen und menschlicher lesbarer machen oder einfach entfernen, weil ich glaube, dass Benutzer zu diesem Zeitpunkt wirklich wissen müssen, wann es erstellt wurde. Das Erstellungsdatum ist eher für eine Systemüberwachung als für den Benutzerverbrauch. Wir können einige davon durchziehen und verstecken. Eine andere Sache, die ich priorisieren möchte, wäre den Foren für Alice create car. Wir haben gesehen, dass wir sehen IID-Fahrzeugmodell-ID, Anrufer-ID. Denken Sie nun daran, dass diese ID-Werte eher für dieses System als für den Benutzer gelten. Der Benutzer wird also hierher kommen und sich fragen, was macht das eine ID, aber dann sieht er Namen. Stattdessen sollten die Etiketten sanftmütig sehen oder etwas Fahrzeugmodell Farbe sehen. Anstelle von Meek ID, diesem Nummernschild, sollte das für mich etwas menschlicher lesbarer sein. Ich denke, es wäre schön, eine Validierung einzureichen, um sicherzustellen, dass keine zwei Fahrzeuge die gleiche Lizenzteilnummer erhalten. Ich denke, das ist ein Nachteil der Datenqualität. So kleine Dinge wie diese würden die Bereinigungsaktivität darstellen. Beginnen wir mit unseren Schnittstellen für das Modell und die Farbe , die die Tat geschaffen hat. Das reicht einfach. Wir können einfach zu diesen Seiten springen , sind diese Seiten. Für das Modell springe ich also zur Indexseite und entferne einfach die Spalte, die das Erstellungsdatum anzeigt. Ich entferne diese beiden Spalten. Machen Sie dasselbe für den Farbindex, entfernen Sie ihn und entfernen Sie ihn. Das. Sieht mir bisher gut aus. An diesem Punkt ist diese Aktivität gut und alles für das Erstellen von Autos und Updates oder vier Formulare für die Autos, bei denen wir eine Modell-ID hatten. Sie sehen hier, dass Lear SP Sir Label, ESP Armaturenbrett für Fahrzeugmodell-ID steht. In Ordnung, also haben wir uns schon angeschaut, wie wir den Anzeigenamen für den Index ändern können den Anzeigenamen für den , für den es sich um einen Anzeigenamen handelt. Und wir sagten, Name ist Meinungsforscher als Wort Modell anstelle seines Standardnamens, Name. Das reicht einfach. Alles, was wir tun müssen, ist überall, wo wir diesen ID-Wert gehabt hätten. Wir lassen es einfach wissen, dass es mich sehen soll. Wenn wir das Modell erstellen, hätten wir die Dropdown-Liste für die Mikrofon-ID gehabt, dasselbe Prinzip. Wir geben ihm nur das Anzeigenamen-Mikrofon, damit die Dropdown-Liste stattdessen LC MC kennt. Wenn ich also zum Model springe, habe ich einfach einen Cheat gemacht und gesagt, dass das Update ist. Die Bewerbung. Ich laufe ohne Debuggen. Aber wenn ich zu Models gehe und auf Neu erstellen klicke, los geht's. Es heißt nicht make statt Meek ID. Also schauen wir uns Autos an, die nicht charakterisiert waren , wie es hieß make id, auto model ID und Farb ID. Was ich tun möchte, ist in die Autoklasse zu gehen und über Meek ID habe ich gesehen, dass dein Anzeigename gleich MC ist. Für die Farbe ist Ihr Anzeigename gleich Farbe. Für die Fahrzeugmodell-ID lautet Ihr Anzeigename Automodell. Wenn ich das alles speichere und zurückgehe, wird es automatisch aktualisiert und du siehst alles, jetzt sieht es etwas menschlich lesbares Nummernschild aus. Ich gebe ihm einen Anzeigenamen. Und dieser Anzeigename wird Nummer des Speicherplatzes für den Lizenzbereich angeben. Hier. Wenn ich wollte, dass es etwas anspruchsvoller ist als nur ein Jahr, könnte ich sehen, dass Ihr Anzeigename hier hergestellt wird. Ich zeige Ihnen nur , dass, wenn Sie diese schönen sauberen Schnittstellen sehen , dies alles ist, was sie im Hintergrund tun. Dotnet macht es Ihnen so einfach , diese Änderungen im Hintergrund zu erfüllen und sie hier herstellen zu lassen. Es macht es Ihnen so viel einfacher , einfach über Ihre Benutzeroberfläche mit ihren Labels konsistent zu sein Ihre Benutzeroberfläche mit und wie alles aussieht. Das ist es also wirklich für diese spezielle Aktivität. Die nächste große Aktivität für mich wäre, die Schaltflächen irgendwie zu ändern oder die Konsistenz mit unseren Schaltflächen zu haben. Also haben wir diese Generalüberholung mit Karten durchlaufen , bei denen wir diese schön sauber aussehenden Schaltflächen für das Erstellen, Neu, für die Bearbeitung, für unser Erstellen oder einen Buck zur Liste für die Bearbeitungsseite eingerichtet diese schön sauber aussehenden Schaltflächen für das Erstellen, Neu, für die Bearbeitung, für unser Erstellen oder einen Buck zur Liste für die Bearbeitungsseite speichern oder ein Geld, um die Details, Idioten oder ein Geld aufzulisten, wir haben all diese. Aber dann haben wir andere Seiten vorgestellt, die uns einfach wieder zum Standardkram gebracht haben. Was wäre, wenn wir uns tatsächlich ändern, diesen Look behalten wollen , oder besser gesagt, dass es einfach genug ist , sich zu ändern oder sie sehen aus, weil wir das getan haben. Wir sehen, wie sie aussehen, ändern zu können. Aber was wir tun müssen, ist sicherzustellen , dass sie alle konsistent sind. Konsistenz ist entscheidend. Im Webdesign. Sie möchten sicherstellen, dass alle Ihre Seiten dieses gemeinsame Thema hinter sich haben. Was wir tun werden, ist, sich das ganze Wochenende diese Knöpfe anzusehen und mehr wiederverwendbare Foren einzuführen. Denn wenn ich das hätte, was ich habe 1234 verschiedene Orte mit dem Create Button. Also habe ich einen Create-Button in der Liste der Autos, eine, die auf der Liste der gemischten Modelle und Farben steht. Aber was wäre, wenn ich das allgemeine Design von einem Pluszeichen zu etwas anderem oder etwas oder auf dem Button ändern wollte von einem Pluszeichen zu , hätte ich vier verschiedene Orte, um dieser Änderung gerecht zu werden. Wenn wir zurückkommen, werden wir uns ansehen, wie wir irgendwie abstrahieren können , das ist Alt und gewon gemäßigt auf allen Seiten verwenden können. 24. Bereinigen von Benutzeroberfläche: Das letzte Mal, als wir hier waren, haben wir unsere Etiketten behandelt , die nirgends zurückkamen um alle vier Schaltflächen und das allgemeine Layout aller unserer pHs, die Listen und wie alles fließt, aufzuräumen das allgemeine Layout aller unserer pHs, die Listen und wie alles fließt, . Wir sprechen davon eine allgemeine Vorlage für Loch- oder Knopfabschnitte zu haben. Sieh mal. In dieser Lektion werden wir uns ansehen , was wir haben. Teilweise ist genau das, was der Name andeutet. Es ist wie ein Teil einer Seite. Wir verwenden bereits Partials, da unsere Ansichten, diese View-PFAS technisch gesehen teilweise sind, da es nur ein Teil von allem ist, was für eine HTML-Seite benötigt wird. Und was wir dann tun, ist es zufällig oder nicht zufällig ist, tut mir leid, sie dynamisch innerhalb des jeweiligen Abschnitts des gesamten pH-Wertes wiederzugeben , den wir wollen. Dies ist also unsere Hauptseite und hier setzen wir alle globalen Stile und alles in Ordnung. Aber dann rendern wir die Partials basierend darauf, wo wir navigieren, wir zeigen den Teil, damit es wie die Änderung aussieht. Die Seiten ändern sich tatsächlich , wenn wir nur den Abschnitt innerhalb des Rendertextes ändern. Jetzt können wir diese Konzepte nicht mehr auf die eigentliche Seite bringen . Und genau das werden wir tun, um die Indexschaltflächen zu erhalten. Im Moment habe ich Index-Buttons für die Auto-Indexseite komplett studiert . Es ist einfach genug, einfach zu kopieren. Springen Sie zu Automodellen, gehen Sie zum Index und es hat die Tasten hier ersetzt. Das ist einfach genug. Dann ist es wieder einfach genug, dies für jede andere Seite zu tun . Weil die Tasten wirklich und wirklich gleich aussehen müssen und unser Routing ziemlich konsistent ist , außer dass wir hier das Standardgerüst für die Bearbeitung der Automodelle und alles verwenden hier das Standardgerüst für die Bearbeitung der Automodelle und alles sonst, wo ändern Sie das, um für die Bearbeitung für die Einkaufswagen zu aktualisieren. Das mache ich tatsächlich rückgängig. Es brachte nur den Punkt nach Hause , dass du sie ändern könntest. Eine Datei umzubenennen ist ziemlich einfach. Ich muss sagen, dass die oberste Datei umbenannt wird, die Codedatei wird auch umbenannt. Aber eine weitere Konsequenz davon ist , dass ich gerne irgendwo mit dem Namen des Modells übereinstimme , um dies vom Opiatmodell zu ändern, um das Modell zu bearbeiten und Steuerpunkt zu verwenden und benenne ich Refactor durch und durch um. Und dann jeder Pfad, der dazu geführt hätte , dass CSS HTML aktualisiert hätte, muss zu Kopf führen. Das hätte es standardmäßig getan. Ich habe das nur gesagt, um zu sagen , dass wir konsequent sein müssen, wenn wir konsequent sein wollen. Man kann es nicht als Indien, China nennen , und andere ist Veränderung und so weiter. Es erschwert es Ihnen, tatsächlich mit Ihrem Code übereinstimmen. Wir werden die Schaltflächen für alle Indizes ändern. Aber ich möchte den Code nicht kopieren und einfügen. Was wir tun werden, ist im freigegebenen Ordner. Shared Der Zweck von Shard ist, dass die verschiedenen Partials in der gesamten Anwendung zugänglich sind . Im freigegebenen Ordner. Wir werden einfach weitermachen und hinzufügen, ich werde einen neuen Artikel sagen. Und vom Hören würde man Rasiermesser-Ansicht wählen. Wenn Sie sich den Unterschied zwischen Arrays von B-Bäumen of view ansehen, ist die Erweiterung die gleiche innerhalb der Beschreibung, die besagt, dass eine Seite mit Seitenmodellen geliefert wird . Was wir also benutzt haben, um IRI zu kennen. Also Seiten, auf denen wir zu CSS HTML und CSS HTML gelangen. Die Erhöhung der Sichtweise wird jedoch nur mit dem CSS-HTML einhergehen, und das ist in Ordnung. Was ich diesen Teil nennen werde, sind Unterstrich-Indexpartials , Entschuldigung, Indexschaltflächen. Wenn Sie Konventionen benennen, führen Sie den Unterstrich an. Konsistenz ist entscheidend. Indexschaltflächen unterstreichen. Und es ist einfach so klar, dass es sich um partielle Indexanleihen handelt, partielles Z von zwei Besatzungen, der führende Unterstrich und die finanziellen Enden des Wortes partiell. Also können wir weitermachen und das hinzufügen. Wenn wir diese Sichtweise haben, müssen wir ein Modell angeben. Das Modell stellt im Grunde alle Daten oder Datentypen dar, die die Art der Daten regeln, auf die in diesem Teil zugegriffen werden kann. In unserer regelmäßigen Benutzerfreundlichkeit hätte Modell bei San Modell gehabt. Und Sie würden sehen , dass sie einige komplexe Klassentypen verwenden . Und deshalb können wir einige wunderbare Dinge tun Daten zuzugreifen und sie zu manipulieren. Auf dem pH-Wert wollen wir jedoch nur die Indexschaltflächen. Und alle Indexschaltflächen, die wirklich benötigen als dynamische Daten zählen würden, wäre der ID-Wert, den jede Seite für jedes Element generieren müsste. Also werde ich nur sagen: Modell sagen. Und ich mache es zu einer Ganzzahl , weil wir einen ganzzahligen Wert als ID-Wert erwarten . Die Tasten oder der Code, den ich für die Tasten verwenden werde , stammen aus dem Auto, da dies die Tasten sind, die wir bereits gut entworfen haben. Ich gehe einfach hier rüber und kopiere sie. Und ich habe gesehen, dass alles konsistent sein muss. Also haben wir die Bearbeitung geändert, aktualisiert, um den Link zu bearbeiten , und wir haben sichergestellt, dass der Seitennamen auch geändert wird, damit er nicht mehr aktualisiert Es ist nicht bearbeitet, dass wir alle gleich teilen grundlegende Dateien oder Dateinamen ziemlich auf der ganzen Linie. Jemand, der das kopiert, legt es statt des Teils ab. Dann sehen Sie rote Linien, die dort erscheinen, wo item.name DID war, weil ich in Ordnung sah, ich sehe kein Element oder eine Variable oder kein Objekt auf dem benannten Element von Pease. Ich weiß nicht was, aber denken Sie daran, dass unser Modell die Ganzzahl ist , die im Grunde Delta-ID des Elements darstellt. Also kann ich einfach bei Sign Model sagen, weil das Modell nur eine ganze Zahl sein wird. Dies war nahe, um Ihnen zu zeigen, dass Sie jedes Mal , wenn Sie Daten auf Ihrer Seite oder einem Teil benötigen, nur ein Modell verteidigen und Ihre Datentypen zu Ihrem Vorteil nutzen müssen. Modell und Modell. Details bearbeiten, löschen. All diese sind auf unserer auf der Seite , die wir wollen würden. Und ich habe es zuerst in der Autorede getestet, wo wir den Teil einbeziehen wollen, muss man beim Schild sagen, weil wir ein paar C-Sharp lesen müssen und wir warten oder HTML-Helfer. Und wir haben teilweise ein Waschbecken. Jedes Mal, wenn wir ein Asynchron verwenden, müssen wir einem Gewicht vorausgehen. Dann benötigt diese Methode zwei Parameter oder es hat mehrere Überlastungen, die wir bei Überlastung verwenden , die den gewonnenen Namen vom Teil nehmen werden , was Indexschaltflächen teilweise ist. Dann geben wir ihm auch das Modell. Das Modell ist generisch. E kann alles sein. Es geht nicht darum , dass das Modell irgendetwas sein muss. Ich sage dir, was der Wert ist, den ich weitergeben möchte. Und es wird herausfinden, wenn es zum eigentlichen Teil kommt , dass es in Ordnung ist, der angegebene Wert ist der Typ des Modells, den er erwartet. Wenn ich Interior sagte und eine Zeichenfolge angegeben habe, wird sie nicht geladen, wenn ich den Juan Daten-Werttyp sage und sie einen anderen Datenwert bereitstellen. Also wenn ich will, wenn ich sage, dass der Modus der Datentyp ist, aber einen Wert eines anderen Datentyps angeben. Es wird nicht funktionieren. lässt dich nur wissen, dass es sehr generisch ist, aber streng genug ist, um zu wissen, dass das, was du mir gegeben hast , nicht das ist, was ich erwartet habe. Wir haben diese Änderung an der Geschwindigkeit des Autos vorgenommen. Wenn ich F5 kontrolliere und es mir ansehe , bekomme ich 500 Fehler, also bekomme ich eine ungebetene Ausnahme und scheue mich nicht vor Pfeilen. Ich möchte, dass wir sehen , was der Fehler ist. In dieser Situation erhalten wir einen Einblick, wo es nach einem Int suchen wird, nach einem Teil. Dies sind also legale Orte, an denen Sie einen Teil setzen können , so dass, wenn Sie nur sehen, dass dies der Name der Partials ist, an diesen Stellen danach suchen wird. Es sucht in Seiten Slash Cars Slash Index Button teilweise. Nein, ist es nicht. Therapiekanten slash Seiten schrägen den gemeinsamen Schrägstrich dort und Ansichten schrägstrichen gemeinsam den Namen. Wir wissen mit Sicherheit, dass wir es teilweise in den geteilten Index der Seiten einfügen. Aber dann sagte ich In-Button teilweise im Code, wenn ich die Schaltflächen aufrufe, das ist mein Rechtschreibfehler genau dort. Machen Sie einfach weiter und ändern Sie das, speichern Sie und kommen Sie dann zurück und aktualisieren Sie es. Und nirgends sehen zwei Knöpfe. Unser Code funktioniert also oder teilweise funktioniert. Lassen Sie uns also noch mehr beweisen, damit der Teil funktioniert. Für gemischte Modelle und für die Farben nehme ich diese eine Codezeile, eine Codezeile. Ich setze es einfach auf alle anderen Indizes. Wenn es also schon auf Autos geht, lassen Sie es mich auf den Index setzen Für vier Modelle, etwas Holz, um es auf den Index zu setzen, vier Farben. Ich setze es für mich auf den Index. Wenn ich dann speichere und kontrolliere, aktualisiere jeden von ihnen, wirst du sehen, dass diese Links angezeigt werden. Alles was nicht erfrischend ist, weil ich nicht gespart habe. Also lass mich zurückgehen. Siehe Knotenknöpfe hier oben, Knotenknöpfe hier oben. Sie sehen also mit sehr minimalem Aufwand, dass wir diese Knöpfe geschoren haben. Mal sehen, ob sie noch arbeiten. Wenn ich auf Bearbeiten klicke, navigiert es zur Bearbeitungsseite. Wenn ich auf Details klicke, navigiert es ins Detail. Sp, es wird das für alle von ihnen tun, denn wieder ist Konsistenz der Schlüssel zur Navigation. Die Eigenschaften sind überall gleich. Sie suchen alle nach dem ADA, demselben Konstrukt oder nach gleichen Werten. Aber dann relativ zum Routing-Mechanismus im Ordner für ein Automodelle und für Autos und für jedes der anderen. Es weiß, wo es hingehen muss , wenn es geklickt wird. Aber es ist ein Basiscode. Was ich jetzt tun kann, ist die Standardeinstellungen zu entfernen. Ich werde nur jeden der Indizes durchgehen und Sie werden eine Menge sauberer aussehen sehen, wir reduzieren drei Zeilen wiederholten Codes. Und im Fall der Karten noch mehr Fahrspuren. Und ich entferne einfach die kommentierte Zeile. Und das sieht viel besser aus. Wisse, dass jeder mit den Buttons auf derselben Seite ist. Wissen Sie früher, ich hätte gesagt, seien Sie ermutigt, wenn wir das andere Rohöl-Tool machen, versuchen Sie, die gesamte Löschfunktion und die Löschtaste mit dem Klick auf das Formular und alles zu replizieren Löschtaste mit dem Klick auf das auf allen anderen Seiten. Wissen Sie, wenn wir diesen Code auf den Seiten teilen wollten , was müssten wir tun? Nun, wir können das Formular nicht wirklich teilen. Ich würde nicht empfehlen , das Formular zu scheren. Und wir können den Handler definitiv nicht teilen, aber wir können das Skript teilen. Also erstelle ich einfach eine neue JS-Datei. Neue Artikel, tut mir leid, und suche nach JavaScript. Und diese neue JavaScript-Datei wird Index-Lösche-Schaltflächen-Skript sein . Dann können wir das setzen, lass mich einfach zurück zum Code gehen. Diese gesamte Funktion schneide ich einfach aus und platziere sie in das Skript „ Index-Löschschaltfläche“. An diesem Punkt haben wir tatsächlich ein paar Möglichkeiten zur Verfügung, ein paar Möglichkeiten zur Verfügung weil ich nicht gesagt habe, dass wir ein Formular geteilt haben, aber lassen Sie mich bewerten, lassen Sie mich einfach alles schließen, was dabei nicht unbedingt benötigt wird punkt. In der Form bin ich sehr spezifisch, wenn ich sage, dass der Name eine Auto-ID ist. Es ist nicht unbedingt eine Auto-ID. Ich hätte es leicht Record-ID nennen können. Rekordidee ist zu diesem Zeitpunkt ein weitaus allgemeinerer Name als nur Auto. Anstatt sich nach vorne zu freuen, suchte nur das Auto IBM nach einer Rekord-ID. Und ich werde sagen, dass die Datensatzkennung gleich den Daten-IDs auf der Schaltfläche entspricht. Denken Sie also daran, dass jeder dieselbe Vorlage einer Schaltfläche verwendet. Sobald sie auf die Schaltfläche geklickt haben, wird es diese ID haben. Wir können das gleiche Formular verwenden, das an einem Wochenende setzen, einfach das Löschformular einreichen. Ich kann jetzt einen anderen Teil erstellen. Sehen Sie, also lassen Sie mich, bevor ich diesen Teil erstelle, lassen Sie mich sehen, dass SRC gleich dem G-Schrägstrich Index Button Lösche dot js. nur dafür, dass wir das haben. Dieses Formular kann tatsächlich in ein Teil übergehen , weil ich es in einen Teil einfüge , weil ich dieses Formular nicht auf alle Seiten kopieren möchte und wenn sich etwas mit dem Formular ändert, müssen wir alles tun Schon wieder vorbei. Es ist also besser, es in diesem Jahr einfach an einen Teil und schwer zu einem Ort zu legen , und ich habe eine weitere Rasiermesseransicht gesehen. Also füge neue Rasiermesser-Ansicht hinzu. Sobald ich es sehe. Da sind wir los. Und auf der Punktzahl löschen Sie Formular oder Index, löschen Sie Formular, teilweise, Summe, benennen Sie es gut genug, dass ich den Namen später sehen kann und abbilden kann, oh ja, dafür war es. Dieser Teil muss keinen Datensatz aufnehmen. Ich muss ihm nicht mal ein Modell geben. Immer wird dieses Löschformular , das auf jeder Seite namens delete nach einem Handler sucht , über einen benannten benannten Datensatz weitergibt. Nennen Sie es eine Datensatzkennung oder eine benannte Variable namens Record ID. Das ist alles dieser Teil ist vier. Auf der Indexseite habe ich eine andere Möglichkeit, Partials einzubeziehen, was eine viel einfachere Methode ist, bei der ich nur sage Teilname gleich ist und der Name des vorliegenden Teils ist. Anstatt es einzugeben, scannt alternative nach dem Fehler. Ich habe einfach darauf geklickt, F2 gedrückt, um den Namen umzubenennen und einzufügen, dass er intelligenter und nicht härter funktioniert. Dann übernehme ich diesen Block. Und während es auf der Auto-Indexseite ist, kann ich es auf jede andere Indexseite legen. Benutzerfreundlichkeit des Quartals. Jetzt ist der Unterarm da und das Skript sieht den Lösch-Button von unseren Buttons aus. Also kann ich einfach weitermachen und das auf jede Indexseite legen. Alles klar. Wir nähern uns, dass es dort kurz war. Wieder einmal fördern wir Code, Wiederverwendbarkeit und Templating. Wir wollen all diese Anstrengungen im Voraus unternehmen. Sie mögen es lange wissen, aber auf lange Sicht ist es für einen guten Zweck. Wisse, dass wir das Delete Forum haben und jeder eine Datensatzkennung sieht. Lassen Sie mich zum Code für Autos gehen, da hier alles angefangen hat und dann sind wir zur Kontrolle gegangen und der Motor bricht alles zusammen. Und dann haben wir unsere unpausierbare Löschung mit Auto-IDs. Stattdessen habe ich eine Datensatzkennung gesehen, weil denke daran, dass der Name daran gebunden werden wird. Ich nehme nur die Aufnahme-ID und benenne einfach den Refactor während der gesamten Methode um. Und dieser sucht nach dem Auto und dann wird es versuchen, es zu entfernen und zum pH-Ruhm umzuleiten. Ich kann diese Methode und diese Methode ES nehmen, die wir geliebt haben. Sie wiederholen diese Methode durch und durch. Wir könnten theoretisch eine Ergebnisseite erstellen , die alle diese generischen Methoden enthält, und an sie erinnern. So wie auch bei den Autos, um das JSON-Ergebnis zu erzielen, könnte ich es, anstatt es beim Erstellen und Aktualisieren wiederholen zu müssen, es in einen generischen Handler legen , den wir nur sicherstellen, dass wir diesen Pfad von überall aus nennen. Aber das ist in Ordnung. Weißt du, obwohl es nach einer guten Idee klingt und logisch klingt, kann es Grenzen geben, wie viel du alles machen willst, was du verwendbar bist Engineering. Und manchmal entscheidet Ihr Kontext , ob Sie so weit gehen müssen. In diesem Zusammenhang werde ich mit dieser speziellen Methode nicht so weit gehen. Stattdessen lasse ich jede Indexseite ihre eigene Implementierung der Löschungen beibehalten, da verschiedene Seiten oder Datensätze unterschiedliche Anforderungen für unsere Löschung haben können , oder? So wie zum Beispiel Modelle, wenn ich ein Modell löschen würde, müsste ich wahrscheinlich alle Karten, die mit dem Modell zusammenhängen bevor ich das Modell löschen kann. Die Logik darin könnte etwas anders sein. In dieser Situation muss die Löschung hier die Automodelle betrachten und die Automodelle löschen. Also alles, was im Auto ist, benenne ich einfach das Automodell um. Das ist die Implementierung. Diese Löschung ist auf der Seite der Automodelle vorhanden , wo es sich bereits bei Autos befindet. In den Farben ist es also das gleiche Prinzip, wir fügen das einfach hinzu und die Datensatzkennung bleibt gleich. Ich benenne das in Farbe um. Und wir schauen in der Farbtabelle durch und durch. Und dann machen wir das Gleiche. Aber nicht zuletzt für mich, wo wir die Tabelle geändert haben, um alles zu mischen, Farbe sagt oder was auch immer Sie ganze Zeit kopiert und eingefügt haben. Nasen mischen sich, wissen Sie, dass jede Indexseite weiß, dass die Löschmethode nach einer Datensatzkennung sucht. Datensatznummer stammt von dem Formular, das wir gerade in ein Teil eingefügt haben. Jeder von ihnen würde also nach diesem Löschformular suchen und die Datensatz-ID auf den Wert setzen. Und wieder wird das Drehbuch nicht auf der ganzen Linie geschert. Also lass mich weitermachen und das testen. Wir wählen ein Mikrofon noch für beide aus. Die Liste füllt sich nicht, das ist verdächtig. Lassen Sie uns also fortfahren und das Element untersuchen, schauen Sie sich die Konsole an und dann sehen wir diese ERCP die Eigenschaft nicht lesen kann, Attribut von Null Soul abrufen kann. Ich glaube, dieser Fehler hat damit zu tun, dass wir weitergeben, in unserem Fall erhalten wir die Modell-ID so, dass sie dem Attribut entspricht wenn es auf der Updateseite übergeben wird. Sicher genug geben wir für die ATPase diese Attribute eher weiter, aber wir haben es auf der Create-Seite nicht getan. Was ich getan habe, ist, dieses Attribut in diesem Skript auf dem pH-Wert erstellen einzuführen diesem Skript auf dem pH-Wert erstellen , an dem ich die Modell-ID übergeben habe, gleich 0 ist. Das hat sehr geringe Konsequenzen , wenn man bedenkt, dass zu dieser Zeit eine erstellt wurden, keine Daten vorgelegt werden. Deshalb kann ich die Autopunkt-Auto-Modell-ID nicht verwenden , weil das Auto leer ist, ist es nicht. Wir würden also die gleiche Wissensausnahme direkt unter C-scharfer Seite haben. Stattdessen gebe ich ihm nur einen Standardwert von 0, weil wir ihn wirklich nicht brauchen. geht keine Erweiterung davon oder eine Erweiterung der Änderungsanforderungen geht auf unser Skript über. Wenn wir zum Skript zurückkehren, lassen Sie uns einfach genau bewerten, was passiert. Wenn das Skript zum ersten Mal geladen wird, erhält es die medizinische Versorgung, die vorgestellt wird. Es lädt Modelle und dann erhält es das Attribut und führt dann den JSON aus. Aber sieh dir das an. Jedes Mal, wenn wir den Mix ändern, rufen wir Load-Modelle auf, die dann versuchen werden , die Attribute erneut zu erhalten und dann dasselbe zu tun. Wir brauchen das Attribut wirklich nicht mehr als einmal. Wirklich brauchte ich nur das erste Mal, dass der pH-Wert geladen wurde. Denn danach interessiert es uns nicht wirklich, was ausgewählt worden sein könnte. Was ich tun sollte, ist das erfassen und dieses globale Skript läuft, das Mikrofon zu holen, die Modell-ID zu holen, dann Lord-Modelle. Dann macht es das. Wenn sich die Mixe geändert haben, können wir IID erstellen. Wir setzen die Modelle HTML zurück und wir laden Modelle, was den Fitch macht. Das braucht wirklich nur auf einmal. Das ist also ein weiterer Rückfluss , den Sie wahrscheinlich Betracht ziehen möchten, weil ich glaube, dass dieser Fehler das Türkaskadierungs-Stylesheet für jedes Mal unterbrochen hätte Türkaskadierungs-Stylesheet für , wenn der Wert geändert wird. Wenn du das vor mir siehst, dann bedeutet ein Lob, dass du mehr Tests gemacht hast als ich. Diese Änderungen, lassen Sie uns zurück zu unserer Webanwendung gehen und versuchen Sie es erneut, für das Auto zu erstellen. Und dann mache ich Toyota, und dann sehe ich, Okay, Nissan und Ferrari Hokey kaskadieren Stylesheet ist Buck. Lassen Sie mich zur Bearbeitung übergehen und sicherstellen, dass Bindungen schlimmsten sind, wenn ich das Ärgernis ändere und es für unsere Wirbelsäule auftaucht. Gut. Wir sind gerade beim Testen oder rohen Toyota Corolla Block. Diese ist eine weniger als geteilte Zahl aus dem Jahr 2001, und ich habe gerade drei weitere hinzugefügt, nur um das Hinzufügen von Werkzeugen zu beschleunigen. Ich teste das Löschen. Deshalb wollten wir sicherstellen, dass die Löschfunktion weiterhin mit den Geschwindigkeiten unserer Autos funktioniert. Also lösche, wir bekommen unsere Suites Alarm, das ist gut. Wenn ich auf Okay klicke, wird es gelöscht. Das funktioniert für uns. Das ist gut. Wenn ich jetzt auf die anderen Seiten gehe, erstelle ich hier einen Test, weil ich die anderen führe. Das schafft also immer noch funktioniert, das ist gut. Funktioniert das Löschen oder schaut sich das an? Die gleiche Suite-Warnung wird angezeigt. Und wenn ich auf Okay klicke, ruft es die Löschfarm auf und leitet auf die Seite und alles perfekt um. Jetzt sehen wir, wie wir es schaffen können. Sicher werden wir jemanden programmieren, um den höheren aus der funktionierenden Modulliste zu löschen . Dann habe ich eine neue Farbe kreiert. Wir haben immer noch die Urkunde erstellt, also ist das eine weitere Bereinigungsaktivität , die ich übersehen hätte, wo wir das Eingabefeld für die Urkunde entfernen müssen , die auf einigen von ihnen erstellt wurde. Aber wir haben den Test und das Löschen funktioniert. Einfach so. Wir hätten einige Partials eingerichtet um sicherzustellen, dass die Schaltflächen konsistent aussehen. Das gleiche Konzept kann also auch auf die Schaltfläche Buch erstellen oder Erstellen mit einem Pluszeichen erweitert werden auch auf die Schaltfläche Buch erstellen . Obwohl diese sauber aussehen, aber was wäre, wenn wir wollten, dass sie alle genauso aussehen? Anstatt es oder was auch immer Feind in diesem Stil für die Schaltfläche „ Erstellen“ zu erstellen, ist es nicht der meiste Code, aber es ist wieder eine Frage des Lochs. Sie möchten Ihre Anwendung so weit wie möglich umstrukturieren . In dieser Situation haben Sie wahrscheinlich nur Essensschlüssel und Inhalt mit dem Kopieren und Einfügen der Schaltfläche „Erstellen“ vielleicht mit verschiedenen Ideen für die verschiedenen Cree-Mischungen auf den verschiedenen Seiten. Aber letztendlich würde ich wahrscheinlich versuchen, das in etwas zu integrieren, das wiederverwendbar ist, zumal dieses keine Daten benötigt. Es ist nur ein Button oder ein Anker-Tag, das den Top-Kill Partisi ASP hat , Strich-Pitch. Split voraus und habe die Bearbeitung selbst gemacht. Ich wollte dich nicht durch jeden einzelnen führen, weil, wie gesagt, ganz granular mit der Vorlage und den Schaltflächen kommen und die Fähigkeit teilen. Das liegt an Ihnen in Bezug auf Ihre Toleranz für eine solche Aktivität. Ich habe es gemacht und ich werde Sie durchgehen , nur für den Fall, dass es etwas ist, an dem Sie wirklich interessiert wären. Unabhängig davon. Ich schließe nur alle Registerkarten und wir können einfach durch die freigegebene Site schauen , zusätzliche erstellt. Also haben wir das zusammen gemacht, Indexschaltflächen teilweise, wir wissen, was wir wissen und verstehen, dass wir die Daten als Ganzzahl übergeben und wir können über oder Keyword-Modul auf diese Daten zugreifen . Jetzt bleibt für die Schaltfläche Erstellen bereits das p-Tag mit der Schaltfläche „ Erstellen“. Und das kommt von dem, den wir zusammen für die Autos gemacht haben. Und dann habe ich auf jeder Seite gerade die andere Möglichkeit gemacht, das Teil zu referenzieren, was sieht, dass der Teilname dem entspricht. Da es also keine Daten gibt , die für die Schaltfläche „Erstellen“ benötigt werden, muss ich kein Modell oder ähnliches einfügen. Sie können auch Partials wie diese einschließen. Sie sind genau wie statisches HTML. Und im Allgemeinen muss man das so machen, wenn sie Daten benötigen. In Ordnung? Also dieses statische HTML aussehende Target, ich habe das einfach in die Automodelle gesteckt. Ich habe das überall in den Auto-Index gesetzt, wo ich ihn brauchte. Ich stelle es einfach überall hin, wo sie geschaffen haben. Was war, ich habe gerade den Teil geschrieben. Sobald ich bekomme, ob ich das Design ändern wollte, ändere ich einfach das Design an einem Ort und überall wird betroffen. Das ist der „Create“. Ich habe es für die Details getan und alle Detailschaltflächen hätten dieses div mit dem Anker-Tag gehabt, um zur Bearbeitungsseite zu gehen. Und es hätte die Routen-ID in Form der Datensatz-ID übernommen. Und dann fügen wir den Buck to List Button hinzu. Deshalb benötigte dieser ein Modell auf jeder Detailseite , die teilweise verwendet wurde? Ich hätte warten müssen. Teilweise asynchron nannte die Detailschaltfläche teilweise, und dann gebe ich die ID einfach nach Bedarf ein. Ein weiterer Teil der Bereinigung war, dass ich die erstellten Felder aus den Create-Foren und aus dem Index und so weiter entfernt habe erstellten Felder aus den Create-Foren . Das war also ein weiterer Teil der Bereinigung , den ich irgendwie außerhalb der Kamera gemacht habe. Aber sei wieder frei, kreativ zu sein. Fühlen Sie sich frei kreativ zu sein, denn es ist Ihre Anwendung, die Sie am besten wissen und Ihre Kunden die Stimme sind, der Sie folgen müssen. Tun Sie also, was Sie richtig halten, und Sie können das bereinigen oder Änderungen an Ihrer Schnittstelle vornehmen, oder Änderungen an Ihrer Schnittstelle vornehmen die ich nicht in Betracht ziehe , dass sie mit meiner tun. Der andere wäre also die Bearbeiten-Schaltflächen gewesen, die einfach sind, streng HTML. Dies wären die Bearbeiten-Schaltflächen am Ende des Formulars, die zu speichernde, diejenige, die zur Liste zurückkehren soll. Bei jedem Bearbeitungsformular würde ich nur teilweise Bearbeitungsschaltflächen sehen, teilweise. Setzen Sie das einfach ein und denken Sie daran, dass die Formulargruppe ich gerade das ganze div gemacht habe, die Knöpfe und in diesen Teil gelegt habe. Sie können also einfach in diesen Teil eines beliebigen Bearbeitungsformulars passen. Jedes einzelne Bearbeitungsformular kann diesen Teil erhalten. Noch einmal, Konsistenz. Wir haben uns bereits Bearbeitungen angeschaut. Wir haben Index, Delete und das war's. Das sind alle Partials, die ich habe. Das sind alle Modi, die ich gemacht habe. Und ehrlich gesagt sieht die Benutzeroberfläche genauso aus. Ein Benutzer würde nie wissen, dass wir das alles im Hintergrund gemacht haben. Alles wird gerendert und funktioniert wie erwartet. Es gibt Schaltflächen auf der Detailseite und unser Löschen funktioniert wie wir wissen, es sollte. Alles klar. Ich habe gerade auf der Autodetailseite bemerkt, dass das okay ist. Also kommen einige DTAs oder nicht zurück. Also lasst uns das reparieren, solange wir hier sind. Deswegen sind wir danach hier. In Ordnung, also lasst uns zu unseren Kartendetails zurückkehren , Schule hinter sich, und ich denke, das hat damit zu tun, dass wir hier nicht genügend Daten zu unserer Anfrage einbeziehen. Ich springe einfach zum Index und leihe mir den Code aus, der das Include enthält. Anstatt es von Grund auf neu zu schreiben. Und ich werde es einfach hier platzieren. Und da sind wir los. Also machen wir unsere Autos, schließen alles ein und erhalten dann den ersten oder Standardwert per ID. Und heb dir das auf. Geh zurück und aktualisiere und weiß, dass die Details etwas Gutes zeigen. Wir klicken einfach durch und schauen uns die Schaltflächen an. Und nun, das ist aufgetaucht, oder? Wenn wir also auf eine Seite gehen, werden wir die gleiche Art von Dynamik sehen. Die Knöpfe sind da, alle auf die gleiche Weise. Und das hat gedauert, ich habe das nicht aufgeräumt. Kein Problem. Deswegen sind wir hier. Also lass mich zu Farben springen. Takeoff das Erstellungsdatum. In Ordnung. Ich denke, das war's für diese Aktivität. Eigentlich können Sie es wahrscheinlich versuchen, wenn Sie sich für die Schaltflächen zum Erstellen interessieren weil Sie sehen, dass sie hier Schaltflächen erstellen, sehen Sie nicht so aus, als würden wir wollen, dass sie dort schauen, es ist auf den Autos. Ich habe die Create-Buttons für die anderen nicht gemacht. Wenn Sie sich also in die ganzen Teilknöpfe einkaufen und alles wiederverwendbar haben, können Sie diese gerne selbst ausprobieren. Alles klar Leute, also nirgends am Ende eines weiteren Meilensteins haben wir ein paar zusätzliche Tische eingelegt. Und es stellt sich heraus, dass es eine wunderbare Anwendung ist. Wir haben uns mehr JavaScript und jQuery angeschaut. Wir haben uns angeschaut, wie man ein fortgeschrittenes Hotel macht. Diese serverseitige und clientseitige sprechen miteinander, während die Anwendung läuft, die sich in Form der kaskadierenden Dropdown-Liste manifestiert . Wir haben uns angeschaut, wie wir Vorlagen mithilfe von Partials auf mehreren Seiten teilen können . Es gibt noch viel mehr zu tun und es gibt noch viel mehr zu lernen. Aber kleine Schritte und Übung sind das, was wir grün dazu bringen werden. An dieser Stelle, was wir in unserem GitHub-Repository tun werden , ändert Oliver alle unsere Migrationen und Entitäten und alle Änderungen, die wir mit der Datenbank oder den Skripten vorgenommen haben . Alles wird nicht zu unserem Repository hinzugefügt. Wir haben nur eine nette Botschaft abgegeben , die uns zumindest eine Zusammenfassung darüber gibt, was die Änderungen sind. Und dann gehen wir alles und sinken. Wenn das abgeschlossen ist, können wir mit dem nächsten Modul fortfahren. 25. Einrichten von Data: Alles klar Leute, willkommen zurück. Jetzt wollen wir also irgendwie beurteilen, wo wir uns im Projekt befinden. Wir haben einige Funktionen eingerichtet, die wir einsetzen müssen, das ist in Ordnung. Aber im Moment müssen wir sicherstellen, dass wir einige sicherstellen, dass wir einige grundlegende Konzepte einführen damit wir bei der Verlängerung unserer Anwendung nicht so viel Schaden anrichten, wie wir das Potenzial haben tue es, wenn wir die Stiftung nicht richtig machen. Ich möchte mich jetzt auf die Verwendung der B2B is Kontexte direkt auf unseren Seiten konzentrieren ? Nein, ja, es funktioniert. Und es wurde von Microsoft vom Entity Framework Core-Team entworfen, um die direkte Einfügung des Kontextes in die Seite zu ermöglichen . Und das wäre in dem, was wir Sculpt Monitor nennen, also für die Lebensdauer einer Anfrage, während der gesamten Lebensdauer dieses Codes läuft um Ihre eindeutige Kontext-Instanz zu erhalten. Alles klar, also jedes Mal, wenn es auf diese Seite kommt, bekommst du eine neue Instanz und sie kann ihre Arbeit erledigen und dann verschwindet sie. Automatische Künstler, es öffnet eine Verbindung, erledigt die Arbeit und schließt die Verbindung. Denken Sie daran, dass die Datenbankkosten teuer sind, daher wollten sie sicherstellen, dass Sie so effizient wie möglich über eine Datenbank sind . Und ja, sie haben einen wunderbaren Job gemacht. Die Sache ist jedoch, dass Sie manchmal feststellen würden, dass Sie mit der Wiederholung von Abfragen beginnen. zum Beispiel Wenn wir zum Beispiel diese tun müssen, lassen Sie es auf diesen Fall fallen, müssen wir eher gemischte Modelle und Autofarben bekommen. Wenn wir Mikrofone auf mehr als einer Seite bekommen müssen, ist es schwierig , diese Codezeile zu wiederholen. Also ja, Wiederholungen werden passieren. Aber wie hoch ist Ihre Risikotoleranz oder besitzen Sie diese Wiederholung? Weil wir diese Auswahlliste innerhalb der finden müssen, ist sie für die Autos. Wir müssen es auch für ein Automodelle tun. Und wir bekommen die Modelle, egal ob wir unsere Bearbeitung erstellen, wir müssen gehen und mir denselben Abfrageaufruf. Etwas könnte sich ändern. Was wäre, wenn wir Mix hätten? Wir hatten einige von ihnen , die wir nicht zu aktiv sind oder einige Kriterien für uns, welche wir wollen. Dann laufen Sie möglicherweise Gefahr , dass Sie aufrechterhalten müssen. Wenn sich etwas mit der Art und Weise ändert , wie Sie den Mix aus der Datenbank erhalten , müssen Sie mehr als einen Schlüsselzoll in mehr als einem gefällt. Und wenn Sie eines dieser Dinge vergessen, laufen Sie möglicherweise Gefahr , dass Sie die nicht so einfach aufrechterhalten Anwendung nicht so einfach aufrechterhalten werden können, wie er hätte beibehalten werden können. Es gibt eine Reihe von Dingen, die ich bekomme, dass es wirklich der Grund ist, warum Leute einen Rapper oder ein Repository um die Datenbankoperationen bauen einen Rapper oder ein Repository um , für die Sie eine Referenz haben können allgemeine Operationen. Und Sie können bestimmte pro Tabelle haben. Aber dann ist es immer noch eine Wartung, 1 von Kontakt. So ist es auf lange Sicht einfacher zu warten. Um diese Aktivität zu starten, wird das Einrichten eines Repositorys in unserer Lösung eine weitere Datei zu anderen Projekten oder anderen Projekten hinzugefügt, und es wird eine Klassenbibliothek sein. Ich habe meine auf meinen aktuellen Vorlagen, in denen Sie immer nach Vorlagen suchen können und wir möchten eine C-Sharp-Klassenbibliothek. Sie klicken auf Weiter, und dann nennen wir es Carbo King up Dot-Repositorys. Dann klicke ich auf Weiter und wir wollen es so sein, wir können es als eine.net fünf belassen, das ist in Ordnung. Und erschaffe. Sobald wir dieses neue Projekt haben, können wir damit beginnen, es zu sezieren, indem einige neue Ordner einrichten. Ich habe gerade die mitgelieferte Standarddatei gelöscht. Und der erste Ordner wird Verträge sein. Und das andere wäre Repository. Pausiere die Tories. Technisch gesehen wollen wir hier dem Konzept der Schnittstellentrennung folgen . Das ist das Ich in Solide. Ich rede immer wieder von solide. Es ist ein Akronym, in dem alte dir alle Briefe sagt, die ich sie gebrochen habe, nicht. Und jedes Mal, wenn wir einen von ihnen umsetzen, weise ich Sie auf richtig hin. Also haben wir uns die Trennung der Sorgen angeschaut , nämlich die S. Wir haben uns die Abhängigkeitsinjektion angeschaut, das ist das D, nirgends auf das Auge blickt, was Schnittstellentrennung ist. Deshalb haben wir Verträge und wir haben Repositorys. Das Konzept des Lieferantenvertrags ist, dass Sie es sind, Sie unterzeichnen einen Vertrag, um etwas Arbeit zu erledigen. Du hast die Arbeit noch nicht erledigt. Der Vertrag ist jedoch die Erklärung, dass Sie die Arbeit erledigen werden, und das werden Sie tun. An diesem Punkt werden wir diese Schnittstellen aufrufen, weil die Schnittstelle die Deklarationen darüber enthält, was möglich ist, das wird der Wortlaut im Vertrag sein. Dann wird das eigentliche Repository, oder wie wir die Implementierung nennen, erben. Der Vertrag oder die Schnittstelle und sei die eigentliche Arbeit. Sie hätten also den Vertrag unterschrieben. Der Vertrag ist ein Diktat dessen, was Sie tun werden. Aber später machst du es und du machst es unter Anleitung des Vertrags. Das ist also die Hoffnung , dass eine Analogie für Sie sinnvoll ist, aber Sie werden Sie genau sehen, was ich meine, wenn dies zum Tragen kommt. wir zunächst mit dem Erstellen einer Schnittstelle in diesem Ordner „Verträge“. Und dann werden wir anrufen, es wird das sein, was ich hier benutze, aber wir werden es wirklich einfach „generische Repositories“ nennen . also eine Schnittstelle haben, setzen Sie in der Regel ein Kapital I und dann, was auch immer es genannt wird, wenn Sie was auch immer es genannt wird, AI ein generisches Repository sehen. Und das wird eine öffentliche Schnittstelle sein, keine öffentliche Klassenschnittstelle. Dieses generische Repository wird die Basisfunktionen haben , die jede Datenbanktabelle überall ausgeführt wird. Wir haben gesehen, dass wir hinzufügen, entfernen, entfernen, bearbeiten und aktualisieren können, im Grunde genommen verwenden oder Repository verwenden oder den Datenbankkontext verwenden. Das sind also die gleichen Operationen , die wir unserem generischen Repository-Eukaryote zulassen sollten, außer dass wir den Code schreiben werden , wenn ich einmal zur Resort-Buchhaltung gegangen bin Resort-Buchhaltung , ist, dass wir schreibe es so, dass es gegen jeden Tisch geschehen kann, der übergeben wird. Jetzt gehen wir also auf das ein, was wir Generika in C-Sharp nennen werden . Um etwas Generisches zu machen, verwenden Sie diesen Typ Klammern. Das sind also die Winkelklammern oder das Größere als und Distanzierung. Und dann gibst du ihm in diesen Klammern ein Token. Also rufe ich es einfach an, bitte folge. Das wäre also dein Generikum Tolkien. Sprechen Sie im Allgemeinen mit Personen, die wie t- oder t-Modell oder T-Entität, Alkohol, die T-Entitäten verwendet t- oder t-Modell oder T-Entität, Alkohol, werden. Das TI bedeutet also nur, dass es ein Generikum ist. Was ist Generika? Was ist der generische Typ, von dem ich erwarte, dass es sich um eine Art Entität handelt. Dann werde ich sehen, wo t Entität, von der ich gesagt habe, gib mir das generische Repository und es ist relativ zu einem mir das generische Repository und es ist generischen, das als Entität bezeichnet wird. Und dann gab ich an, wo T Entität ist. Ich könnte Klasse sagen, ich könnte int sagen, egal welchen Datentyp ich hier spezifiziere. Es heißt im Grunde, dass dies generisch ist, soweit es diesem Datentyp entspricht, nach dem ich suche. Wenn ich Klasse sage, bedeutet das, dass Eigenkapital buchstäblich jede Klasse passiert , in der nicht unbedingt das ist, was ich tun möchte. Anstatt Klasse zu sagen, sehe ich das Basisdomänenobjekt. Oder es ist, erinnere dich einfach durch Trucking. Denken Sie daran, dass wir eher die Basiseinheit haben. Tut mir leid, ich habe Objekt gesagt. Es sollte auf einer Entität basieren. Da sind wir los. Lassen Sie mich eine Entität. Jede einzelne Entität, die sich in unserer Datenbank befindet, muss zumindest die Beast-Domain-Entität sein. Auf diese Weise. Wir stellen sicher, dass wir immer etwas bekommen, das tatsächlich eine Datenbank-Entität ist. Ich möchte keine andere Klasse es sei denn, es ist eine Datenbankentitäten. Das gebe ich hier an. Rote Linien, weil ich keinen Bezug auf dieses Projekt habe. Denken Sie also daran, wenn wir mit Bridget zusammensitzen, wo können Sie einen Verweis auf das Datenprojekt hinzufügen? Nun, es gibt institutionelle Repositorys, die eine Abhängigkeit vom Datenprojekt haben werden . Also muss ich diese Referenz hinzufügen. Ich kann einfach eine Referenz hinzufügen und es wird die using-Anweisung für mich und alles hinzufügen. Und dann verschwindet diese rote Linie. Alles klar, sieht gut aus. Als nächstes wollen wir die Methoden haben, von denen wir wissen, dass wir sie brauchen werden. Wieder einmal ist dies die Schnittstelle oder nur der Vertrag. Dies ist also nur eine Erklärung dessen, was möglich ist. Es ist nicht der eigentliche Code. Der erste, den wir haben werden, ist, dass wir nur meine asynchronen Terminologien verbrauchen werden. Es ist also eine Aufgabe, die eine Liste zurückgibt. Ich wollte es so nennen, hol alles. Wir wollen alles in der Datenbank bekommen , die wir sehen, alles bekommen. Kein Problem. Ich glaube nicht, dass ich damit etwas anderes machen muss. Lassen Sie es uns einfach dabei belassen , wenn wir es später verlängern müssen und das Wochenende überhaupt getan haben, tut mir leid, dies sollte eine Liste der Art T-Entität zurückgeben. Was auch immer, was auch immer es ist, wir haben es als Basisdomänenobjekt an die T-Entität übergeben, dann wird diese Methode dynamisch alles zurückgeben , was T NTT alles bekommt. Dann wird der nächste grundlegende sein, um zu bekommen, einer wird wollen, dass ein Datensatz int id sagt. Also wollen wir zu einem Datensatz nach ID gelangen. Und dann fülle ich einfach den Rest aus, damit du pausieren und replizieren kannst. Aber letztendlich möchten wir nur eine weitere Aufgabe hinzufügen, indem einen booleschen Wert zurückgeben, um zu sagen, dass der Datensatz existiert und wir die ID übergeben. Wir möchten, dass etwas T-Entität einfügt, etwas zu löschen, wenn es die ID erhält. Und ich weiß nicht, ich möchte nicht aktualisieren, wenn er D-Entität bekommt. Dies sind die allgemeinen Methoden, die wir für jede einzelne Tabelle erwarten. einmal ist dies das Generikum. Nächster Schritt. Wir müssen eine Klasse einrichten, die dieses generische Verhalten implementiert. Innerhalb des Repository-Ordners. Diesmal füge ich eine neue Klasse und sie wird generisches Repository genannt. Also mach weiter und füge das hinzu. Und dann dieses eine öffentliche Klasse generisches Repository. Und es muss auch generisch sein. Es ist also relativ zu In NTT. Es formuliert es in die Kunst, die Entität einklemmt und vom generischen Repository erbt. In Ordnung, denken Sie also daran , dass wir noch einmal den Vertrag haben und dann die Umsetzung haben. Wir haben unterschrieben, dass dies die Arbeit ist, die wir leisten werden. fängt keine Arbeit an. Das ist das Erbe , wo wir sehen, okay. Was auch immer es ist, was der Vertrag gesagt hat, tun müsste. Ich muss weitermachen und es tun. Die Vererbung I generisches Repository. Und dann gehen wir einfach weiter und kontrollieren den Punkt bei den Verwendungen. Wir müssen natürlich angeben, dass dies generisch für eine Entität ist bei der t und t vom Typ BCE-Domäne ist nicht eine Entität. Ähnlich wie das, was wir gerade getan haben, außer nur ein bisschen mehr Nuancengesetz, weil sie für den Dickdarm gesehen werden, ist das anfängliche Erbe und Delta ist genau die gleiche Dekoration , die wir müssen mach nur um sicherzustellen, dass das jeder weiß. Grundsätzlich ist das , was das Unternehmen repräsentieren sollte. Der Grund, warum wir base verwenden können, lassen Sie mich noch einmal eine Entität darin, dass sie von allen Entitäten verwendet wird. Technisch gesehen, obwohl jede Einheit seinen eigenen Datentyp an ihrer Basis hat, sind sie tatsächlich derselbe Datentyp in Form von Bienendomänenentitäten. Dies ist also wie eine eindeutige Kennung für alles, was hier eine Entität ist, fügen Sie morgen eine neue Klasse hinzu , die eine Entität ist. Machen Sie es einfach zur geerbten von b angenommenen Entität, und automatisch teilen sie alle dieselbe Identität. Jetzt wird diese rote Linie hier sein , weil sie sagt, dass ich implementieren muss. Sobald Sie also eine Schnittstelle mit Methoden haben, müssen Sie implementieren. Sie unterschreiben also den Vertrag und alles, was Sie brauchen, um mit der Arbeit zu beginnen. Ich muss nur Kontrollpunkte machen. Und es heißt Interface implementieren, Enter drücken und schauen Sie sich das an. Es hat gerade jeden Methodenstub relativ zu den Deklarationen generiert und hier gemacht. Wenn ich anstelle des Vertrags eine Änderung vornehme, muss ich sicherstellen, dass ich die relative Änderung hier in der Implementierung erfülle. Bevor wir mit unseren Implementierungen beginnen, müssen wir injizieren. Wenn ich also eine Verbindung zur Datenbank brauche, muss ich etwas Ähnliches tun wie auf unseren Seiten, auf denen wir die Türspritze unseres Kontextes gemacht denen wir die Türspritze haben und all das für uns generiert wurde. Ich habe erklärt, was es gemacht hat, aber dieses Mal wurde es für uns generiert. Es gibt kein generisches Links und Rechts, um es uns selbst zu sagen. Lasst uns also mit dieser Null anfangen . Um zu beginnen, können Sie einfach ein CT schreiben ODER zweimal die Tabulatortaste drücken. Du gehst deinen Weg, du rufst den Konstruktor an. Dann muss ich eine Kopie meines Auto-Buchungskontextes einspritzen . Ich werde nur sagen, dass Auto buchen DB-Kontext. Und das befindet sich innerhalb des Parameters außerhalb des Konstruktors. Ich nenne es einfach Kontext. In Ordnung, wir sind an das Wort „Kontext“ gewöhnt. Ich ändere den Namen hier nicht. Dann mache ich einfach Kontrollkanal. Und ich kann sehen, dass ein Zuweisungsfeld Kontexte erstellt wird, wenn ich das tue, sehen Sie, dass es genauso aussieht wie auf unseren Seiten. In der Tat privat lesbar, es ist nur, dass Sie den Überschuss abnehmen können , was auch immer es ist. Stimmen Sie zu, wenn Sie den Dampf von Visual Studio verwenden und zustimmen müssen, lassen Sie dies bedeuten, dass es tatsächlich optional ist, da Sie den Namespace bereits haben. Das ist alles, was dort wirklich passiert, aber es ist dasselbe, Carbokation, ein Kontext, Kontext und dann initialisiert es es. Beachten Sie jetzt, dass es hier einen Unterstrich verwendet, aber er hat uns insgesamt keinen Unterstrich gegeben. Und so persönlich bevorzuge ich es, den Unterstrich zu verwenden, weil ich gerne sehe, dass sich die Felder von den anderen regulären Variablen oder Eigenschaften unterscheiden den anderen regulären Variablen , die ich tendenziell verwende unterstreicht. Ich ersetze es hier. Kontrollpunkt. Und lassen Sie uns den Visual Studio-Refaktor auf einen anderen Ort umstellen, der gleich verwendet wird. Das ist der einzige Grund, warum Sie den Unterstrich und Nazis auf dem Platz dieser einen Monat für Sie sehen werden. Du musst nicht tun, das ist wirklich meine persönliche Überzeugung. Schauen wir uns eine andere Zeile an, in wir die DB Sit initialisieren müssen. Also privat, schreibgeschützt. Schreibgeschützte Felder, so störend der Name auch ist, bedeutet ein schreibgeschütztes Feld, dass, sobald Sie etwas festgelegt haben, da wir nicht führen nur innerhalb des Konstruktors und nirgendwo sonst gesetzt werden kann . Sobald diese Datei aufgerufen wird, wird diskutieren aufgerufen, der Konstruktor wird aufgerufen. Diese schreibgeschützten Felder werden initialisiert und können anschließend nicht geändert werden. Wenn Sie also Code schreiben, ändern Sie ihn versehentlich, es würde Ihnen während der Laufzeit nur einen Fehler geben , dass T versucht, etwas zu tun, das illegal ist. Der Compiler sagt es Ihnen vielleicht nicht, aber die Anwendung wird definitiv abstürzen, da dies nicht möglich ist. Wir lassen eine private schreibgeschützte DB relativ zur t0-Entität sitzen. Denken Sie also daran, dass die D-Entität die Entität für die Klasse darstellt , eher für die Datenbank, und wir werden diese nur eine dB aufrufen. Also kontrolliere Kanal. Und ich füge die using-Anweisung für Entity Framework Core-Problem hinzu. Und dann werde ich anstelle des Konstruktors, der einzige Ort, an dem ich den Wert einstellen kann, initialisiere ich dies auf C. B ist gleich dem Kontext-Punkt. Und wir können diese Methode namens sit nennen. Sit erstellt einen DB-Satz relativ zur t0-Entität, kein Problem. Stellen Sie ein. Und T-Entität. Ich hole die Basis ab, die Verbindung. Dies ist also die Verbindung zum gesamten Datenbankkontext. Und dann wäre dB die Verbindung zur spezifischen Tabelle relativ zu jeder Tabelle, gegen die ich eine Aktion anfordere. Das. So verbindet sich alles. Lassen Sie uns also damit beginnen diese zu implementieren, und dies wird nicht allzu lange dauern da wir im Allgemeinen mit dem Code vertraut sind, der beim Löschen getragen oder zerreißen muss. Schauen wir uns den Löschvorgang an, den wir auf unseren Seiten implementiert hätten . Denken Sie daran, dass wir einige Löschseiten haben. Du könntest sie jemals bewegen, wenn du willst. Aber wir hatten sowieso unsere eigene Löschung im Index vorgenommen. Und was hat es gemacht? Zuerst rief es an und dann stellte es sicher, dass es nicht null war , und dann entfernte es es. Das ist es, was das Löschen im Allgemeinen einen Test durchführen muss , um den Datensatz zu finden und dann heißt es, den Datensatz zu entfernen. In dieser Implementierung ist es also dasselbe. Erstens werden wir sagen, dass var Entity gleich ist, wir können den Unterstrich des DB-Punktes sehen. Jetzt bedeutet db dot die genaue Tabelle, in der ich bin. Und Sie merken, dass uns alle Methoden zur Verfügung stehen. Also sagen wir find und wir verwenden einfach ein For Async, wo sie dies als unsere Aufgabe festlegen. Kein Problem. Finde also asynchron nach ID. Dann sagen wir unterstrichen DB-Punkt, entfernen Sie die Entität. Alles klar, es sieht gut aus. An dieser Stelle beschwert es sich weil ich asynchron finde, ich warte nicht. Und in einem Moment, unsere Gewichte, wird es sich wieder beschweren. Lassen Sie mich sagen, dass dies geschehen ist, bitte. Variabel dieses Gewicht. Und es wird wieder fertig werden, weil die Methode kein asynchroner zweiter Krankheitskontrollpunkt ist und ihn für mich in AC umwandelt. Das ist ein Knochen und ein paar zu gehen. Als Nächstes gibt es existiert. Wie existiert, sah aus, denke ich, dass wir in der Bearbeitung etwas mit einer Existenz machen mussten , in der es hieß dass Rückkehrkontexte die Tabelle mit dieser Bedingung punkten. Kein Problem. Also werde ich diesen Code einfach kopieren und wir können ihn ändern nur um zu sehen, warum er etwas anders aussieht. Also ja, wir werden zurückkehren. wir keinen Context Dot zurück. Stattdessen geben wir den Unterstrich DB zurück , weil dies den Ausgang darstellt, die spezifische Tabelle dieses Mal, was dann bedeutet, dass ich diese Automodelle nicht brauche, weil ich es wirklich nicht weiß in welcher Tabelle ich bin, bis sie diese Implementierung erreicht und die BBC initialisiert hat, ging davon aus, dass es sich um Kontexte handelt, keine Automodelle, es kann alles sein. DB wird also alles repräsentieren. Aber dann ist jede immer noch die Methode, die ich verwenden muss. In der Tat gibt es keine asynchrone. Da sind wir los. Und dann schaut es sich die Bedingung an. Jeder Vorgang muss warten und dann Punkte kontrollieren, um sie asynchron über Wasser zu treffen , und alle sind glücklich. In Ordnung, nett zusammenkommen und sagen Sieh dir an, wie der Code sehr ähnlich aussieht. Aber dann ist es wieder generisch, weil es hier definitiv nach Automodellen sucht. Und wir wissen vielleicht nicht unbedingt , mit welcher Einheit es zu dieser Zeit zu tun hatte. Lassen Sie uns mit unserer Implementierung fortfahren, damit wir es schaffen und relativ einfach werden. Alles, was wir hier tun müssen, ist zu sagen, dass var Entity gleich o ist, es findet eine Senke. Was ich hier ein paar Fehler bekomme. Erstens, weil das ein tödlicher Fehler ist. Dies sollte nicht zurückkehren, zumindest erhalten Sie alle Rückgabe der Liste dazu, nur eine zurückzugeben, die kein Problem ist. Sie müssen die Änderung sowohl in der Schnittstelle als auch in der Implementierung erfüllen . Also sollte Get dort keine Liste haben, es sollte einfach Task T Entität zurückgeben. In Ordnung. Dann können wir das einfach hier ändern. Denn wenn wir nach oben gehen, sehen wir, dass diese saisonale Beschwerde, weil die beiden Methodenstopps nicht gleich aussehen , als ich diese Korrektur vorgenommen habe, es beschwert sich nicht mehr. In Ordnung, als nächstes steuere Punkt, um die Methode async zu machen. Und dann sollten alle glücklich sein. Dies bedeutet jedoch, dass nicht alle Pfade einen Wert zurückgeben. Also könnte ich eigentlich einfach den Satz ändern, sagen wir zurück. Ja, da sind wir los. Als nächstes haben wir etwas Ähnliches, damit es alles bekommen kann. Also sage ich einfach zurück. Anstelle von db.find a sink wäre es db dot, eine Synchronisierung erneut asynchron aufzulisten , aber McCoy-Einschlüsse, Einfügen und Aktualisieren haben ähnlichen Code. Einfügen, wir sagen nur dB bei async und wir fügen die Entität hinzu, übergeben wird und sehen, also benutze dein oh, warte, ich habe die Methode Async und Air nichtig gemacht. Sie geben nichts wie nur eine Aufgabe zurück. Dieser ist ungültig. Es gibt also keine echten asynchrone Update-Methoden. Und das liegt an der gesamten Nebenläufigkeit oder potenziellen Nebenläufigkeit , die wir in den früheren Tagen besprochen hatten . Weil Sie nicht riskieren möchten , Operationen für denselben Datensatz, im selben Thread oder in verschiedenen Threads zu aktualisieren . asynchrone Programmierung erzeugt also einen anderen Thread. Aus diesem Grund können Sie mehrere Anzeigenoperationen ausführen, mehrere Abrufvorgänge gleichzeitig ausgeführt werden, aber dann ist ein Update irgendwie zu löschen, ist irgendwie riskant. Sie würden feststellen, dass diese beiden nicht unbedingt asynchrone Filme sind , nicht die asynchron. Und es gibt nichts Asynchrones, doppelte Anlage hier. Diese müssen einzeln geschehen, um Konsistenz zu gewährleisten. Jetzt haben wir unser gesamtes Repository, generisches Repository erstellt. Ich mache nur einen Build Control Shift und B nur um sicherzustellen, dass alles richtig funktioniert. Da sind wir los. Nein, ich gehe nicht weiter. Ich denke, das sind viele Entzündungen, die man aufsaugen muss. Sie können also einfach alles überprüfen und sehen, wie sich all diese Punkte miteinander verbinden und wie alles gebunden ist. Das letzte, was ich jedoch tun werde, ist, eine Referenz für unser neues Projekt zu unserem Carb-Suching-up-Projekt hinzuzufügen . Das wird mich dazu bringen , die Abhängigkeiten neu anzuordnen , weil ich ein Projekt oder das Tool eines Freundes hinzufügen werde , Repositorys eins. Okay? Und dann ist die Sache, dass Repositories auf die Datenprojekte verwiesen haben. Wenn ich also die Datenreferenz entferne und dann einen Build mache, sehen wir, dass es immer noch erfolgreich ist. An dieser Stelle benötigen wir also keinen direkten Verweis von unserer Webanwendung auf unser Entitätsprojekt, da es sich um die Repositorys handelt. Die Repositorys werden dieses Director-Referenztool haben , diese Daten. Und dann hat das Datenprojekt die Verweise Dritter auf Entity Framework, Core und so weiter. Die Hierarchie ist also immer noch intakt. Wenn Sie hinschauen, werden Sie feststellen, dass keine unserer Quoten wirklich kaputt ist. Aber letztendlich wollen wir diesen DB-Kontext nicht direkt in unsere Seiten einführen. Wenn wir zurückkommen, werden wir unseren Code so widerspiegeln , dass er eins oder ein Boot wird und das von uns erstellte Repository registrieren wird. Und dann tauschen wir den Code aus, um das Repository zu verwenden. Und dann für komplexere Operationen, die erforderlich sind, gehören einige der Felder und so weiter. Wir schauen uns ganz an. Wir müssen unser Repository in unserem Code ändern , um diese speziellen Situationen zu erleichtern. 26. Erfüllungsort erster Repository: Leute, willkommen zurück. Was wir gerade erreicht haben, war einen kleinen Wrapper für die Überarbeitung des Datenbankkontextes einzurichten und einige der direkten Referenzen zwischen unserer Webanwendung und der Datenbank zu entfernen der direkten Referenzen zwischen unserer . Also haben wir dieses Mittelohr eingelegt, das manche Leute als Geschäftslogikschicht bezeichnen würden . Denn wenn wir etwas Besonderes zu tun haben, würden spezielle Operationen den Code nicht unnötig in die Webanwendung schreiben wollen . Wir wollten nur eine Methode nennen und diese Methode dann die Entscheidungen erfüllen lassen und alles tun , was getan werden muss, was von ausgefallener Natur ist , ohne ein bisschen Ausdruck zu haben. Das wäre also das, was unsere Repository-Schicht wirklich repräsentiert. Wissen Sie, dieser Lear kann wachsen. Wir haben derzeit nur viele Operationen in zwei Dateien behindert . Es gibt jedoch Wachstumspotenzial , und Sie werden sehen, dass es basierend auf einigen der Operationen, die wir durchführen müssen, erweitert werden muss, um die Repositories verfügbar zu machen Abhängigkeitsinjektion in unsere Webanwendung. Wie das, was wir mit dem DB-Kontext machen können. Was wir tun müssen, ist vorwärts zu springen oder starten und sie als Formendienst zu registrieren. also in den Konfigurationsdiensten daran, dass wir sie geändert haben, um den DB-Kontext hinzuzufügen , der bleiben muss. Aber was wir tun können, ist Dienste zu sagen. Und wir können sehen, dass in Klammern in Klammern hinzugefügt werden. Ich werde sagen, Typ des generischen Repositorys mit leeren Klammern. Dann lasse ich es wissen, dass dort, wo Sie die Schnittstelle sehen, es vom generischen Repository und auch mit den engen Klammern implementiert wird . So wird möglicherweise ähnlicher Code auf andere Weise geschrieben , wo Sie tatsächlich sagen, dass Sie einen Bereich hinzufügen, Typ der offenen Klammer und seine Implementierung hinzufügen. Aber weil wir Generika verwenden, muss das so gemacht werden. Und es ist nur eine andere Möglichkeit. Es ist im Grunde dieselbe Art von Code. Später, wenn wir bestimmte Repositorys haben und Sie den anderen Stil des Schreibens dieser Zeile sehen. Aber im Moment fügen wir einfach Scoped hinzu. Es gibt also tatsächlich ein paar Arten von Injektionsmodellen. Injektionsmodelle, was bedeutet, dass Lochservices in ihrem Leben Nervenkitzel auf das gespritzt werden in ihrem Leben Nervenkitzel auf das gespritzt , was wir unsere Anfrage oder Hals nennen, die Laufzeit der Anwendung. Für den Kontext haben wir Scoped hinzugefügt. Also mussten wir Scoped in der Schule hinzufügen. Dies bedeutet, dass Sie für die Durchführung einer Operation Durchführung einer Operation bis zum Abschluss dieser Operation eine Instanz verwenden werden, was auch immer wir uns geben. In diesem Fall verwenden Sie eine Instanz des generischen Repositorys , solange Sie einen Vorgang oder eine Reihe von Operationen auf einer Seite ausführen . Transient bedeutet, dass jede Operation, mit der Sie beginnen, Ihnen immer eine neue gibt. Also transient hinzuzufügen ist in Ordnung, wenn Sie das mit Escort Service tun. Da der DB-Kontext erfasst ist und das generische Repository von Scoped abhängt, könnten wir das Repository leicht entweder transient oder formend erfüllen . Kein Problem. Der andere ist Singleton. Singleton, was bedeutet , dass ich eine Instanz für die gesamte Anwendung sein werde. Es gibt Zeiten, in denen Sie das vielleicht wie bei einer Konfigurationsdatei möchten , etwas, das sich nie geändert hat. Er hat nie erwartet, dynamisch zu sein. Du schaffst es ein einziges Mal. Sie müssen das nicht jedes Mal ändern, wenn etwas passiert oder jedes Mal PhD und GCF eine neue Instanz davon erhalten. Das ist mehr für unsere Datenbankoperationen und bestimmte andere Arten von Diensten wie einem E-Mail-Dienst. Sie möchten auf jeden Fall, dass dies vorübergehend denn wenn mehrere E-Mails einmal gesendet werden müssen, du willst mehrere Gegenstände oder Weihrauch, er ist dran. Und sie sollten schließen, sobald sie fertig sind. Du kannst mischen und abgleichen. Du musst dich nicht unbedingt an alle erinnern und einfach herausfinden , welches ich immer schwarz bin. Aber bestimmte Prinzipien können verwendet werden, um herauszufinden, welches für welche Art von Service am besten geeignet ist. Und diese Datenbank dient definitiv am besten als Sculpt. Wenn Sie einen Hinweis wünschen, wenn Sie den Mauszeiger über den Add-DB-Kontext bewegen, würden Sie tatsächlich sehen, dass er standardmäßig im Bereich ist. Alles, was vom Datenbankkontext abhängt, lass es einfach formen I, es sollte dir gut gehen. Nachdem wir nun unser generisches Repository aufgenommen haben, schauen wir uns an, wie es funktioniert. Also springe ich zu einem ganz einfachen rüber. Fangen wir mit Mikrofonen an. Ich in unserem Create Page Four Mix werde ich tun, anstatt den DB-Kontext direkt in den DB-Kontext zu injizieren, ich werde das Salz ändern, also werde ich einfach den DB-Kontext aus entfernen die Injektion. Und ich werde sagen, gib mir ein generisches Repository, um fehlende Referenzen einzuschließen. Und ich sehe ein relatives Werkzeug. Ich weiß, dass ich im Mix bin, also relativ zur Mittelklasse. Dann kann ich es so nennen. Ich dachte nur, es repository und dann Control Dots. Lassen Sie es ein erstelltes Feld initialisieren. Dann kann ich die Verweise auf den Kontext und das Repository im Score-Repository entfernen , sie haben es einfach umbenannt. Nein, es wird nirgends mit Repository anstelle des Kontextes umbenannt . Und wie erwartet sehen wir ein paar Pfeile gut aus. Nein, das war eine Erstellungsoperation. Das bedeutet also, anstatt den Kontext-Punkt-Mix-Punkt zu sehen , füge ich mich hinzu , kann ich wissen, dass Repository-Dot Und dann war es nach unserem Gewicht asynchron. Dies ist sehr wichtig , dass wir keine Änderungen speichern in unserem Repository implementiert haben. Denken Sie also daran, dass wir jedes Mal wir Daten erweitern, die Änderungen beim Speichern aufrufen müssen . Wenn wir rüberspringen und ich einfach Control F12 machen kann, um zur Implementierung der Methode zu springen. Beachten Sie, dass es nirgends Änderungen zum Speichern gibt, oder? Also aktualisieren wir, wo wir einfügen, wir löschen unser Nichtspeichern. Also heben wir diese Onenote an. Kein Problem. Deshalb ist es gut, diese Dinge zu erwischen. Nein. Ich werde einfach weitermachen und ich werde diese Aufgabe zu einer Aufgabe machen , die einen int zurückgibt. Und es wird Änderungen speichern. Und das hat es geschafft, denn wenn Änderungen standardmäßig eine ganze Zahl zurückgeben, darstelle ich das nur dar. Nun, das ist wie unsere obere Funktion. Wenn ich also zur Implementierung überspringe, wird es sich beschweren, Hey, Union Avenue Methode, bitte implementieren Sie Control Dot Enter. Es ist nicht implementiert. Und dann müssen wir nur noch den Kontext zurückgeben. Wir haben also Kontexte unterstrichen. Gedanke Änderungen speichern ist sinken. Es ist asynchron, also muss ich natürlich warten, Control Dots MC Methode Async und den überschüssigen Speicherplatz entfernen. Da sind wir los. Nein, wir können sehen, ob GnG kein Problem ist. Was wir tun können, ist, anstatt jedes Mal, wenn ich aufrufe, die Änderungen zum Speichern aufzurufen, machen wir die Einfügung hier und dann müssen wir die Änderungen speichern in einer separaten Zeile aufrufen. Wir wissen, dass diese Methoden Änderungen speichern müssen. Es ist einfach genug für mich, nach dem Einfügen zu sehen, wenn Sie hinzufügen, dann rufen Sie Ihre lokale Save Changes -Methode auf. Das ist unser Gewicht. Dies wird die Anzahl der Male reduzieren, wenn Sie die Änderungen zum Speichern in der gesamten Anwendung sehen , da wir wissen, dass Sie eine Einfügung machen möchten, Tings müssen hier durch alles gespeichert werden . Kein Problem. Und dann würde alles im selben Kontext laufen. Egal wie viele Vorgänge Sie mit der WAN-Repository-Instanz ausführen, es speichert immer Änderungen am Ende des d. Also lasst uns einfach abwarten, sehen ob g und g, Also die Einfügung und es speichert immer Änderungen mit dem Update. Und dann schau dir das an, äh, wir würden Änderungen mit dem Update speichern, ähm, weil es nicht asynchron ist, also kein Problem, das wir reflektieren können, während wir weitermachen. Und das Löschen ist auch nicht asynchron, aber dieses war asynchron, weil es etwas Asynchrones gemacht hat. Jetzt können wir das Update davon abrufen, dass es sich um ungültige Kontrollpunkte handelt. Wir können die Methode async machen. Aber anstatt das zu tun, habe ich das Interface modifiziert und zu einer Aufgabe gemacht. Lassen Sie einfach löschen ist eine Aufgabe, die es dann konsistenter machen würde. Wir können also nur asynchrone Task-Update sehen. Und dann sind alle glücklich, unsere Kreationen zu kennen. Wir brauchen diese Zeile nicht, denn sobald wir die Einfügung gemacht haben, wissen wir, dass das Einfügen und Speichern von Änderungen erfolgen wird. Das ist alles in einer Zeile. Wenn wir eine Änderung an einem ganzen machen müssen , werden Einsätze vorgenommen. Wir haben eine Referenz. Wenn es mehrere Stellen in der Anwendung gab, müssen Sie diese Art von Operation durchführen. Und er wollte überall konsequent sein. Anstatt an allen Stellen Codeänderungen vorzunehmen, haben wir 1 Kontrolle über 121 Bezug auf mich, diese Änderungen. Jemand, der dir etwas zeigt. Was wäre, wenn ich jedes Mal, wenn ich die Änderung retten musste, erinnere dich daran, dass wir die geschaffene Tat hinzugefügt hatten und lass mich zurück zum Biest gehen. Ich meine, Einheit, von der wir gesagt hatten, dass Urkunde geschaffen wurde. Erinnerst du dich daran? Nein. Nein. Nein. Wir haben keine Änderungen vorgenommen um das Kreative zu erleichtern da ich es selbst von der Schnittstelle entfernt habe , weil sie es als Hindernis betrachteten. Weil die Benutzer wirklich und wirklich nicht in der Lage sein sollten , es zu sehen oder damit zu interagieren. Es ist wirklich für unser internes System. Ich möchte jedoch sicherstellen, dass jedes Mal, wenn ich diese erstellt habe, nicht wertvoll ist, in Ordnung ist? Zurück zu dem, was ich gesagt habe, anstatt es an mehreren Orten zu tun und für alles, was ich treffen kann. Alles ist anstelle des NIH-Repositorys passiert. Es gibt mir also ein bisschen mehr Kontrolle über den Betrieb. Lassen Sie uns jedoch unsere Methode „Änderungen speichern“ ändern , um weitere Daten hinzuzufügen, die Daten zu manipulieren oder was auch immer wir vorher tun möchten. Es geht tatsächlich in den Datenbankkontext und speichert. Hier können wir die Einträge, die ein Boot sind , aus dem Kontext gerettet werden , indem wir sagen, dass wir es uns leisten sollen. Ich weiß also nicht, wie viele Dinge diesem Punkt gespeichert werden , weil wir mehrere Operationen hätten ausführen können, was auch immer es ist. Also speichere ich nur für jeden Eintrag im Kontextpunkt. Und dann gibt es das Ding namens Change Trucker. Das ist also tatsächlich so, dass Entity Framework tatsächlich Truck macht, wenn sie Ihnen eine Entität gegeben haben, es tatsächlich sieht, dass Sie diese Entität geändert haben? Hat sich etwas an dieser Entität geändert? Deswegen würden wir das Update nicht machen? Wir sehen die Zustände anhängen und dann ändern , um sie zu ändern , damit Entity Framework weiß , dass dies geändert wurde. Wenn Sie also sehen, ob Änderungen hier schlagen, weiß es automatisch, welche Art von Aussage basierend auf dem Status der Entität generiert werden soll . T-Instruktor wird also verwendet, um diese Änderung zu sehen. Dieser hat das nicht getan, hat sich dieser nicht geändert. Instructor ist, ich kann sagen, hol mir die Einträge und dann ist dies eine Sammlung, damit ich Klammern nein verwenden kann, um sie in etwas Bestimmtes zu analysieren. Wenn ich also etwas Bestimmtes sage, kann ich sagen, gib mir alle Einträge. Das ist unser Auto. Besorgen Sie mir alle Einträge des Automodells, aber ich weiß nicht, was gespeichert wird. Das ist generisch. Stattdessen werde ich alles sagen, was gespeichert wird, der vom Typ Basisdomäneneinheit ist, die jede unserer Entitäten sein könnte, die wir haben. Siehst du, nur dieses kleine bisschen Vererbung zu verwenden, erlaubt es uns, wunderbare generische Dinge zu tun, oder? Ein bisschen Code, um viele Tabellen zu bedienen und einfach flexibel zu sein. Ich sage mir jeden Eintrag , der sich in der Kettenstruktur befindet , die für mich oft am besten ist , eine Entität. Und dann kann ich dies erweitern, um zu sagen, dass wir auf dem neuesten Stand sind. Ich möchte nur diejenigen, die den Entitätsstatus als geänderte Kontext-Eingabezustände haben . Ich kann es sehen Hier ist der Q-Lambda-Ausdruck Q-Punktstatus äquivalent zu. Und dann geben Entitäten an, dass uns Entity Framework Core gegeben wird. Und hier sind alle potenziellen Zustände unverändert, hinzugefügt, die Berührung modifiziert, gelöscht. In Ordnung, also möchte ich, dass ich, wenn es hinzugefügt wird, alle Einträge haben möchte, dass ich, wenn sie hinzugefügt werden, Entity Entity sehen kann. Entity hier ist wunderbar. Das Generikum und die auf dieser Domäneneinheit basierenden Körper. Der erstellte Punkt ist gleich dem Zeitpunkt. Also kommt alles zusammen. Sobald ich das mache, mich nicht hinsetzen müssen, und wir sitzen beide an diesem Datum, das auf jedem einzelnen Datensatz oder jedem einzelnen Mal erstellt wurde . Etwas ist in der Lage, kreativ genug zu sein, um zu jedem Bij-Code zu erstellen, um zu sehen, bevor Sie es über McDonald senden , ist gleich d time no, und Abfahrten, und ich mache es nur an einem Ort. Sobald etwas erstellt wurde, wird dies passieren. Dann werden Änderungen gespeichert. Und Sie können dies auf beide Dinge ausdehnen , da wir ein Datum hätten ändern können. Man könnte also leicht sagen: Bring mich dorthin, wo der Status hinzugefügt oder geändert wird. Wenn der Status hinzugefügt wird, wird der neue Satz, wenn er geändert wird, sagen Sie, dass er nicht geändert wurde, usw. fliegt immer noch. Also zeige ich dir nur, dass dies wunderbar flexibel ist. An dieser Stelle mache ich einfach einen schnellen Build und wir werden einsteigen und unseren Mix testen und den Unterschied sehen, oder? Nein, Die einzigen Änderungen, die wir vorgenommen haben, ist das Erstellen von Pj. Das ist in Ordnung. Erstellen Sie also Neu. Und ich sage, teste neues Repository. Das bin nicht ich. Aber lass uns einfach weitermachen und auf „Kunst erstellen“ klicken. Es gibt also immer noch Arbeiten. Lassen Sie uns in die Datenbank schauen und sehen, was die Götter für den Datumszeitraum sitzen. Und so bohren Sie in die Datenbank und schon um die Karbokation hochzuschlagen. In unserer Mix-Tabelle sollte der jüngste Rekord das Deet haben und los geht's. Jeder andere hatte das Standarddatum, dieses eine Problem in den Warenkorbdaten, den genauen Zeitstempel, wann es erstellt wurde. So einfach war es zu wissen, ob wir das gesamte Erstellungsangebot ändern, und ich werde Sie auffordern , dies genauso zu tun, wie wir das Create-Modell hier geändert haben . Für mich werde ich Sie herausfordern, dasselbe für Farben zu tun, dasselbe für Automodelle zu tun. Es sollte einfach genug sein , dasselbe für Autos zu tun. Ja, weil der CTO einfach genug ist. Alter, der alle Kreationen unterstützt und wenn Sie sich dazu bereit fühlen, machen Sie dasselbe für die Bearbeitung. Weil es so ziemlich dasselbe ist, wo immer Sie Kontexte hatten , dass Sicherheit vom Kontext abhängt, liebe es, Dinge zu tun. Hier ist das gleiche Anhängen mit den Entitäten Status modifiziert Cmd, G und G. Das ist alles, was wir in unserer Update-Methode getan haben. Wo auch immer Sie diese haben, versuchen Sie sie gegen den Repository-Code auszutauschen. Also mache ich es und wenn wir zurückkommen, können wir vergleichen, was getan wurde. 27. Refactoring Seiten: Willkommen zurück Leute. Als wir das letzte Mal hier waren, hatten wir einen Auftrag bei dem wir andere Seiten vervollständigen sollten. Ich hoffe, du hast es alleine versucht. Und wenn Sie auf dem Weg auf Probleme stoßen, die nicht überraschend wären, nicht das Gefühl, dass Sie die Arbeit nicht richtig machen würden oder so weiter. Es gibt bestimmte Teile davon, die etwas mehr Erklärung benötigen als einige. Aber letztendlich hoffe ich, dass Sie es versucht haben und ich hoffe, dass Sie verstehen, was wir hier erreichen wollen. Was ich tun werde, ist zu überprüfen, was wir das letzte Mal gemacht haben. Und dann werden wir jede der allgemeinen Änderungen durchgehen . Und es gibt einige Änderungen, denen etwas mehr Code geschrieben werden muss. Also lasst uns die zusammen machen. Beginnen wir damit, zu überprüfen was wir das letzte Mal gemacht haben, als wir es mit Mikrofonen zu tun haben, und wir haben die Seite „Erstellen“ geändert, oder? Also haben wir die Injektion des Repositorys auf unsere Create Page relativ zu mir vorgenommen, das ist ein generisches Repository relativ zum Mikrofon. Dann könnten wir all diesen ausgefallenen Code ersetzen um es zu erhalten, und Story- und Dichteänderungen durch eine Codezeile. Nur der Einsatz. Lass uns weitermachen. Also richte ich meine Löschseite ein. Wir wissen, dass wir keine Bits löschen müssen. Ich lösche gerade die Löschseite genau dort. Und dann schauen wir uns gemeinsam Details an. Also Details machen wir das Gleiche, wir machen unsere Injektion. Daher ersetzen wir die Kontextinjektion durch die generische Repository-Injektion. Und wo wir dann den ersten oder Standardwert gemacht hätten , bekommen wir das. Wir haben das gerade durch unser Gewicht-Repository-Dot mit ID-Punktvolumen ersetzt. Wenn ich zu schnell vorankomme oder du es noch nicht getan hast, gerne innehalten und replizieren, während ich weitermache, aber bitte stelle sicher, dass du die Erklärungen des Codes verinnerlichst, während ich weitermache. Schauen wir uns den Schnitt an. Gleiche Injektion. Ich bin sicher, du fängst an, unser gemeinsames Thema im Einkaufszentrum zu realisieren . Nein, alles was wir tun müssen, ist unser Repository in Bezug auf die Entität zu injizieren unser Repository in Bezug auf die Entität zu , in der ein Boot auf der Seite verwendet werden soll. Dann für das On bekommen diese Zeile im Grunde genommen ihn wir als die Details die gleiche Zeile bekommen. Ich habe keines der Standardquartale der Schecks geändert. All diese sind immer noch notwendig. Ich ersetze nur den Code bezüglich des Kontextes dann im Beitrag, anstatt den Status zu ändern, um ihn zu ändern und dann Änderungen zu speichern, lege ich einfach die Aktualisierung dort hin. Denn beim Update wird es weitergehen und sehen, ob g und g sowieso sind. Wir müssen uns also keine Sorgen machen, dass daran etwas nicht stimmt. Alles, was wir tun, ist das zu ändern, um es in einem Try Catch zu aktualisieren und alles sollte auf die gleiche Weise funktionieren. Eine weitere Änderung der Schrägstrich-Verwaltung wäre bei den Existenzen gewesen. Existiert war nicht asynchron, es war nur private bool make existiert und es erhält die ID. Also habe ich es geändert, um zu sagen, ich warte, Repository, das mit der ID existiert, die den Myth-Loader asynchron gemacht hat. Durch die Verwendung des Steuerpunkts er automatisch asynchron an den Namen der Methode angehängt . Kein Problem hat es asynchron gemacht, kein Problem. Eine andere Sache, die Sie tun müssten , ist sicherzustellen, dass Sie bei dieser Methode ein Gewicht aufrufen. Ruf hier oben an. Die Namen und alles könnten, Sie möchten den IntelliSense verwenden, aber Sie müssen nur sicherstellen , dass Sie diese Zeile eingeben. Dies ändert sich ziemlich dieselben Änderungen für dieselben Seiten, für Farben, da diese beiden Seiten oder diese beiden Entitäten keine Abhängigkeiten haben. Farben, das Gleiche, außer dass wir unser Repository injizieren, das zum Ausmalen bereit ist. Und dann verwenden wir die gleiche Zeile dort für einen seitlichen Bedarf das Löschen. Also werde ich das für die Details entfernen. Wir haben das Gleiche. Wo wir nur die Details der Farbe für die Bearbeitung erhalten, haben wir die gleiche Injektion, bei der wir die Farbe erhalten. Und später aktualisieren wir die Farbe bei Bedarf. Der Index. Ich habe den Index für das Mikrofon übersprungen, auch Index für Mekka und Farbe. Ziemlich einfach. Nehmen Sie teil oder wir injizieren oder Repositorys. Liste wird alles bekommen. Kein Problem. Ich denke, das sollte gemischt sein. Das habe ich vielleicht gelesen. Wenn nicht, dann kannst du weitermachen. Ich habe diese Änderung vorgenommen. Das bedeutet, dass Sie alles bekommen und dann ON delete, alles was wir tun müssen, ist das Löschen aufzurufen. Wenn Record ID gleich ist zu wissen, gehen wir nicht zu telefonieren. Ansonsten rufen wir einfach die Löschübergabe in der Datensatz-ID auf. Das ist alles, was es dazu gibt. Nett und einfach und konsequent. Also siehst du, ich meinte nicht, dass sie die Farben hört. Kein Problem. Machen wir das noch einmal zusammen. Und buchstäblich werde ich diese Zeile einfach kopieren, weil es sich im Grunde um den gleichen Code handelt. Und ich kann das alles durch diese eine Codezeile ersetzen. Weil jeder Repository genannt wird und Sie spezifisch werden können, wenn Sie möchten. Ich sage nicht, dass Sie es Repository nennen müssen und jeder muss es als Repository bezeichnet haben. Möglicherweise möchten Sie spezifisch abrufen und dieses eine Color-Repository aufrufen, ein Repository erstellen usw. Kein Problem. Aber am Ende des Tages, dem Basiscode und seinem Aussehen, wird die Struktur immer konsistent sein. haben wir für Farben gemacht. Wir haben das für mich getan, macht kein Problem. Schauen wir uns Automodelle an. Und auch ein Automodelle ist insofern etwas komplizierter, als wir Anfangsdaten laden müssen. Du siehst also, dass ich einige der Änderungen vorgenommen habe und etwas Unbekanntes hinterlassen habe. Denk einfach, er ist hier, wo du warst. Und wenn nicht, dann fühlen Sie sich auch noch einmal frei, pausieren Sie und replizieren Sie, was Sie auf meinem Bildschirm sehen. Wir haben den Einfügecode in der Post-Methode bereits ersetzt . Es ist ein Repository-Insert-Auto-Modell, in Ordnung, aber dann müssen wir die Liste der Mix bekommen, was bedeutet, dass ich ein Repository brauche, das mir den Mix verschaffen kann. Obwohl unter Repository-Gefängnissen relativ zum Automodell nicht gemischt ist . Hier möchten Sie wahrscheinlich mit dem Namen des Repositorys spezifisch werden. In diesem Fall möchte ich dieses Auto-Modell-Repository nennen und ich benenne einfach um, und ich kopiere einfach drei, verwende diesen Namen und benenne entsprechend sono um. Jeder weiß, dass dies ein Auto-Modell-Repository ist. Also füge das Auto-Modell-Repository das ein. Ich brauche ein Repository , das relativ zum Mix ist. Kein Problem. Ich kann ganz einfach hierher gehen. Ich werde nur dieses Bit kopieren, von dem Sie sagen, dass ich ein generisches Repository relativ zu mir habe. Und ich habe dieses eine Mix-Repository genannt. Hier kommt die gezielte Benennung ins Spiel und dann lassen Kontrollpunkte ein zugewiesenes Feld erstellen. Und die Injektion passiert. Natürlich verwenden wir unseren Unterstrich. Und nachdem ich all das gemacht habe, nein, ich kann einfach hier runterspringen und sehen, dass x einer neuen Auswahlliste entspricht. Warten Sie, dass der Mix-Repository-Punkt zu allen kommt. Sieh dir das an. Jeder ist glücklich. Das war's. Sie können also mehr als ein Repositorys auf derselben Seite haben. Also habe ich ein Repository, das mit der Fahrzeugmodelltabelle spricht. Und ich habe Repository, um zu sagen was Sie beide die gleiche Codebasis sind. Das ist wirklich alles, was ich für das Erstellen tun musste . Also muss ich diese Leistung für den Redakteur wiederholen. Natürlich wissen wir, was wir tun ist, zwei im Grunde nach dem Replizieren mit edit zu erstellen . Ich werde einfach kopieren und einfügen wie fast nie ******. Ich habe das noch schneller gemacht. Ich nehme einfach all das, tauchte auf und ersetze all das im Bearbeiten und benenne dann einfach das Konstruktorfeld oder den Konstruktornamen um. Mein Repository, was waren Repositories? Kein Auto-Modell-Repository. Und dann wieder Auto-Motor-Repository. Und dann wäre dies unser Gewicht-gemischtes Repository. Dot hol alles. Factoring kann mühsam sein, aber es gibt Möglichkeiten, es zu beschleunigen, wenn Sie NPS kopieren, ähnliche Quote, Sie wissen genau, was Sie ändern müssen. Schauen wir es uns an. Ich habe ein paar Sekunden gebraucht, um bearbeiten und zu erstellen. Ich entferne die Löschseite für mich. Ich brauche es nicht für die Details. Bereits alle Details geändert , da wir nur ein Automodell brauchen. Aber dann gibt es noch etwas anderes, das Sie sich ansehen müssen, nämlich das Fett, das das Automodell gemischt hat. Also müssten wir die Mix-Details in die Fahrzeugmodelltabellen aufnehmen . Ich glaube nicht, dass wir es vorher gemacht haben. Ich bin zum Repository gewechselt. Aber das müssen wir definitiv implementieren, damit die Detailseite das Mikrofon richtig anzeigt. Deshalb haben wir die Schnittstelle nie verändert, weshalb wir die zurückkommenden Daten nie ändern mussten. Wirklich und wirklich, dies sollte Punktname des CAR-Modells sein, weil wir es sehen wollten, und das ist das Automodell und das ist das Mikrofon. Es hängt mit diesem Punkt zusammen. Wir müssen auf jeden Fall ändern, wie wir die Daten erhalten, da unser Getty nur die Daten erhält. Aber wir haben bereits gesehen, dass wir, wenn wir mit den Details verwandter Aufzeichnungen erfahren wollen , ein Includes machen müssen und so weiter. Und wir wissen nicht, was wir das Generikum einbeziehen sollen , weil ich nicht essen kann, nur etwas auf den Tisch aufnehmen kann, da verschiedene Tabellen unterschiedliche Eigenschaften haben , die enthalten sind. Also haben wir in diesem Szenario auf jeden Fall einen benutzerdefinierten Code für ein Automodell gesucht. Und dann müssen wir ihn für den Index erweitern, müssen wir ihn für den Index erweitern auch weil wenn wir die gesamte Indexseite erhalten, wahrscheinlich nicht nur den Namen anzeigen wollten, genau wie bei Die Details wollten Sie wahrscheinlich auch das Mikrofon anzeigen . Ich meine, das liegt an dir. Dieser ist wahrscheinlich optional. Ich werde den Index nicht erweitern, um das Mikrofon anzuzeigen, aber das müssen wir für unsere Autos tun. Also habe ich noch nicht alle Autos gesehen, und Sie können hier sehen, dass einige von ihnen Datentypen falsch sind. Hat etwas Refactoring gemacht, ein globales Refactoring, das eine Reihe von Dingen durcheinander brachte. Aber wenn du dir das ansiehst, siehst du, dass ich ein Auto-Repository bekomme. Habe sich an dem Code hier nicht viel geändert. Aber dann haben wir das gleiche Problem, wo wir den Mix brauchen, die Farben, die Modelle, die verdächtig fehlten. Wir müssen die hereinbringen. Das bedeutet also, dass ich vor Modellen und unserem Repo für Farben einen erneuten Mix oder einen Repo für Farben benötigen würde . Ja, wir haben eine SEO losgeworden indem wir alle Kontexte genommen haben, da die Kontexte konzeptionell niemals direkt mit dem Controller oder der Seite interagieren sollten . Aber dann haben wir ein Modell erstellt , in dem wir eine solche Abgrenzung zwischen den drei Datentypen erstellt haben , dass wir drei verschiedene Instanzen des Repositorys injizieren müssen. Wie immer sehen, gibt es Zeiten, in denen Sie etwas tun, weil es sinnvoll ist, aber dann ist es wichtig, wie detailliert Sie basierend auf Ihren Zielen sein müssen. nicht standhalten. Lasst uns einfach weitermachen und diese zusätzlichen Repositorys holen. Ich wollte dich nicht langweilen, wenn du mir zusiehst, aber so sieht es im Grunde so aus und ich werde nur die Linien züchten. Sie können sehen, wo jede Zeile beginnt und stoppt. Sag einfach, es ist sehr, sehr klar. Wir injizieren einfach Repository pro Typ, den wir benötigen. Wir initialisieren diese Felder. Nein, relativ zu jedem Anruf werden wir das Einkaufswagen-Repository nutzen . Also hier sage ich, unterstreiche den Piraten. Das ist also das Auto-Repository. Dies ist das Create, also sind es Einsätze und wir fahren im Auto vorbei. In Ordnung, jede Analyse, die Sie immer bei der Überwachung des Datentyps unterstützen wird, wird basierend auf dem Repository benötigt oder gegessen. Dort fahren wir weiter und setzen unser Auto ein. Hört nichts. Wir machen es bei Automodellen. Wir wissen also, dass dies ein kaskadierender Dropdown-Listenbereich ist. An dieser Stelle würde also definitiv einen benutzerdefinierten Code benötigen. Denn wenn wir r bekommen alles bekommen, erhalten wir alle Datensätze einmal, aber dann werden wir basierend auf ID. Wir erhalten hier eine erforderliche basierend auf der Primärschlüssel-ID. Wir haben auch nicht alle Automodelle bekommen wenn eine völlig andere Reihe gleich einem anderen Wert ist. Wir müssen also definitiv einen benutzerdefinierten Code dafür haben, aber wir sind noch nicht ganz da. Lassen Sie uns sicherstellen, dass alle unsere gängigen Methoden gleich sind. Also für den Mix, also habe ich auf einem Score-Mixer-Repository-Punkt gesehen, um alles zu bekommen. Dann kann ich einfach jeden von diesen ersetzen. Ich kopiere einfach einen Branchennamen, diese Automodelle, und füge sie ein. Ich bin eines dieser Repository und das war Colors. Farben. Farben. Haben wir Farbe? Farbe? Lassen Sie mich einfach kopieren und in das Sinnlose einfügen. Es ist langsam dort. In Ordnung, also sind zumindest diese behoben. Jetzt mache ich genau dort eine Pause. Und wenn Sie sich die Detailseite ansehen und sich die Indexseite ansehen und wie gesagt, die Bearbeitungsseite und sogar das Erstellen, wo wir die kaskadierenden Dropdown-Listen haben, müssen wir sicherstellen, dass wir suchen zum aktuellen Zeitpunkt nach den Kartendingen. Wenn wir also wiederkommen, werden wir uns ansehen, wie wir unsere Repositorys erweitern können. 28. Komplette Repositories: Alles klar Leute, also sind wir Dollar und was wir in dieser Lektion tun werden , ist ein paar benutzerdefinierte Repositorys aufzustellen. Lassen Sie mich über Kundenrepositorys sprechen. Es gibt Zeiten, in denen wir für bestimmte Entitäten oder bestimmte Operationen bestimmte Entitäten oder bestimmte Operationen benutzerdefinierten Code benötigen , der nicht generisch sein kann. Fall wäre also für unsere Erstellung, wo wir unsere kaskadierende Dropdown-Liste haben. Wir brauchen hier auf jeden Fall einige kundenspezifische Methoden, um die Hardware-Betrachtung der Fahrzeugmodelle in dieser speziellen Situation zu erleichtern . Das bedeutet also, dass ich Modelle oder Automodelle erweitern muss Modelle oder Automodelle erweitern um ein eigenes Repository mit eigenen benutzerdefinierten Methoden zu haben . Ein anderes Beispiel dafür, warum dies erforderlich sein könnte, wäre wenn wir uns die Details oder sogar die Liste der Autos ansehen möchten oder sogar die Liste der Autos Wir müssen diese spezifischen Details für das Auto bei der Suche angeben diese spezifischen Details für auf das Detailmodell. Und wenn wir über die Liste im Index lesen, brauchen wir definitiv auch die Includes. Dies sind Gründe, Ihren Code irgendwie zu erweitern. Das ist nein, das ist nicht wirklich ein offizieller Begriff in der Programmierung, aber ich nenne es schmerzgetriebene Entwicklung. Jeder oder andere Entwickler damit. In Driven Development bedeutet das, dass Sie tun was für das vorliegende Ziel notwendig ist. Und du wirst Lust, wenn er es für erforderlich hält, aber du fängst nicht einfach an, es zu finanzieren weil du etwas übertreibst, das sehr einfach ist. An dieser Stelle sehen wir also die Notwendigkeit dieses Refaktors. Also lasst uns weitermachen und es tun. Das erste, was wir tun werden, ist, zu unserem Repository-Projekt zurückzukehren . Ich habe mit der rechten Maustaste auf Verträge geklickt und füge dann ein neues Element und einen neuen Artikel in Form einer Schnittstelle hinzu. Diesen nenne ich es Automodelle Repository. Wir wissen, was wir brauchen , um es zu machen öffentliche Schnittstelle I Auto Modelle Repository. Was bedeutet dieser Vertrag jetzt? Welche Arbeit muss dieser Vertrag umsetzen? Nun, ich sagte, Sie müssen eine Methode implementieren, die eine Aufgabe ist, die eine Liste von Automodellen zurückgibt, jemand, der es nennt, Automodelle von sanftmütigen bekommen, und es braucht einen Parameter int make ID. Jetzt, damit dieser Vertrag besteht, brauche ich eine Implementierung, die ich als Auto-Modell-Repository bezeichnen werde . Und dieser wird im Repository-Ordner erstellt. Und mir ist einfach klar, dass ich Repositorys an dieser Stelle falsch geschrieben habe. Das tut mir so leid. Repositories, die wissen, wer einige Auswirkungen darunter liebt einige Auswirkungen darunter werden verwendet, aber das ist in Ordnung. Diese können wir ganz einfach erstellen. Also mach weiter und erstelle diese neue Datei. Ich mache einfach weiter und repariere den Rechtschreibfehler sozusagen. Wissen Sie also, wann Sie Ihre Implementierungsklasse haben, nun, wir müssen von KI, einem Auto-Modell-Repository, erben . Das ist also einfach genug, aber dies muss WE-Vererbung sein, denn zum einen sollte dieses Modell-Repository in der Lage sein, alles auszuführen , was das Generische tun kann. Es sollte in der Lage sein, alles zu tun, was Generika tun kann, sowie alles, was angepasst wird. Unser neuer Vertrag ist maßgeschneiderten Operationen im Verhältnis zum Automodell vorbehalten . Aber dann muss es immer noch in der Lage sein, alles auszuführen , was das Generikum tun kann, nämlich Änderungen speichern und dies und das und das. Was wir tun müssen, wenn wir unsere Implementierung haben , ist es vom generischen Repository relativ zum Automodell zu erben . Alles klar, also sehen wir die Implementierung des Repositorys für unser Automodell. Ich möchte davon erben, fehlende Referenzen sowie meinen Kostümvertrag angeben. Wenn Sie sich das jetzt ansehen und ich Control Dot-Implementierungsoberfläche mache, wird es nur die in diesem Vertrag vorgeschriebene Arbeit implementieren . Sie arbeiten jedoch in angewendet vom generischen Repository ist auch im Hintergrund vorhanden. Oh, es beschwert sich bei mir, dass es kein Argument gibt , da es damit übereinstimmt , wenn ich von etwas erbe , das ein generisches Injection-Repository hat, es hat eine Injektion für den Kontext. Wenn ich das Repository für Automodelle aufrufe, das davon erbt, muss das Auto-Modell-Repository alles bereitstellen , was die Basisklasse benötigt. So lange Geschichte, kurz, und es war kein Konstruktor , der die CMDB-Kontexte aufnehmen oder einfach nur kopieren wird. Auto-Buchungs-DB-Kontext, fügen Sie alle fehlenden Referenzen ein, erstellt aber auch ein zugewiesenes Feld. Dann muss ich die beste Methode bereitstellen. Bei einer Instanz des Kontextes ist es fast so, als wäre eine Gänseblümchenkette wie eine Übergabe. Also nennt Albert den Vertrag für i Automodell, es wird wissen, dass seine Umsetzung dies ist. Wenn das aufgerufen wird, ruft es den Kontext aus dem IOC-Container ab und sagt: Okay, base, welches unser generisches Repository ist. Hier ist eine Kopie des Kontextes, den ich habe. Also sind sie beide im selben Kontext-Thread, oder? Nein. Und dann habe ich auch die Kosten für Methoden für das Repository implementiert . Holen Sie sich an dieser Stelle Automodelle per Mikrofon. Ich werde nicht mal viel harte Arbeit machen. Ich springe einfach zurück zu den kreieren Touren in Autos. Wir haben die Create-Methode , die all diese hat. Ich kopiere das alles einfach. Geh zurück zu meinem Auto-Models-Repository. Ich füge das alles ein. VAR-Modelle entsprechen also unseren Gewichten, den Kontexten oder der Umbenennung. Benennen wir das in den quadratischen Kontexten um. Also warte ich auf die Kontext-Punkt-Automodelle wo all das, und dann gebe ich einfach Modelle zurück. Ich erhalte diesen Fehler , weil es nicht das Asynchron ist, mach die Methode Async. Und los geht's, Alles ist nicht gut. Jetzt haben wir ein Kunden-Repository, das uns die angepasste Funktionalität für diese angepasste SQL-Abfrage geben kann die angepasste Funktionalität für diese angepasste . Dieser Punkt im Erstellen Sie einen weiteren Split und sehen Sie, ob alles, alle Änderungen, die wir machen, drücken Sie immer Control S in diesem Repository. Ich brauche nicht das generische Repository für ein Automodell, da dieses mehrmals verwendet wird. Dieses Automodell ja, das Auto-Modell-Repository wird verwendet um unsere Bedürfnisse zu erhalten, um die gesamte Liste der Automodelle zu erhalten und sie relativ zur Identifikation zu erhalten. Ich kann das generische Auge tatsächlich durch KI-Automodel-Repository ersetzen . Dieser ist nicht das Generikum, dieses brauche ich die Rippenmethode, um sie bei den Sanftmütigen zu bekommen. Und dann kann ich einfach keine rote Linie , weil sie immer noch Zugang zu okay hat. Ich bekomme eine rote Linie und ich denke, das liegt daran, dass ich nicht geerbt habe. Ich entschuldige mich, ich hätte vom generischen Repository relativ zum Automodell geerben dieser Stelle vom generischen Repository relativ zum Automodell geerben sollen. In Ordnung, also genauso wie die Schnittstelle geerbt oder die Implementierung vom Generischen geerbt wurde geerbt oder die Implementierung . Die Schnittstelle wird vom generischen Auge vererbt, so dass sie alle Arbeiten sehen kann, die das Generikum leisten kann, und Ihnen seine eigene Arbeit geben kann. Und dann lass mich einfach auf die Implementierung zurückzoomen . Es gibt hier keine Fehler, weil ich bereits auf die Implementierung verweise, die im Grunde genommen die Idee interpretiert, dass die Arbeit dafür groß wird die Arbeit dafür groß und alle anderen für das generische R sowie die im benutzerdefinierten Vertrag definierten benutzerdefinierten Methoden Vertrag definierten benutzerdefinierten werden hier implementiert. Wenn ich zurück zum Create springe. Nein, Die rote Linie ist weg. Da sind wir los. Ordnung, also kann ich für diesen Teil einfach neues Gewicht zurückgeben. Mein Auto-Repository-Dot erhält Automodelle von Meek und gibt ihm die Meek-ID, die als Parameter einging. Dadurch wird all diesen Code eliminiert. Ich brauche diesen Code nicht. Sie werden noch einmal sehen, wenn sich dieser Code ändert, habe ich nur einen Ort, um ihn zu ändern oder es sieht einfach für mich aus, das sieht viel sauberer aus als die, alle Kontextcodes geschriebenen Notiz anstelle der Seite zu haben . Das sieht so viel sauberer aus. Wieder einmal, wenn es funktioniert, ist es gut. Es geht nur darum, was sind Ihre Ziele und benötigen und warten Sie bis zu einem gewissen Punkt oder welche Probleme versuchen Sie zu lösen? das nicht nur, weil Sie das Muster kennen und ich mich daran halten muss, tun Sie es, weil es ein Problem löst, das Sie haben. Das ist unsere Anpassung an die Automodelle. Um eher BH zu erstellen, beachten Sie, dass ich ein generisches Automodelle habe, weil wir dieses neue Repository haben, das individuell ist und eingespritzt werden muss . Ich muss die Anwendung zulassen , dass wir eine andere haben , die eingespritzt werden kann. Ich habe nach dem Generischen geformt und hier einen Fehler bekommen, weil das den Namespace ändert, kein Problem. Aber dann muss ich auch Scoped hinzufügen damit der neue Kunde geboren ist, oder? Also ging ich zu sagen Schultyp Klammer, Automodell, Automodel-Repository, Koma hinzufügen . Und die Implementierung davon wird Automodel-Repository sein. Das ist der Unterschied in Bezug auf die Dimensionen. Da dieser also generisch ist, wer mit einem anderen, aber im Allgemeinen nachher ist, sehen Sie so die Schnittstelle oder das Kontrakt- und Implementierungs-Peering-Ziel , wenn sie registriert werden der IOC-Container. Okay, das müssen wir also wirklich tun , um sicherzustellen, dass es funktioniert. Gehen wir zurück zum Detail Teil des Autos. Nun, die Detailteile von Automodellen haben eine ähnliche Geschichte, wo wir überall das generische Automodell haben, tatsächlich nur unsere spezifische Klasse verwenden könnten, die wir gerade definiert haben. Anstelle des Generikums. Dies verwenden wir jedes Mal, wenn wir es mit Automodellen zu tun haben, da benutzerdefinierte Methoden wie z. B. das Automodell mit den Details nicht erforderlich sind. In diesem Repository. Was ich tun werde, ist wieder zu unserem Vertrag zu springen. Und ich werde eine andere Methode erstellen, heißt, gib nur das Automodell zurück. Und ich wollte mir ein Automodell mit Details holen. Dann müssen wir Ihnen die Idee des Automodells vermitteln, das wir mit Details abrufen möchten. Sobald ich das gemacht habe und diese kleinen Tabs hier platziert habe, damit ich einfach zur Datei navigieren kann. Wenn Sie also nicht die Wannen haben, die ich Ihnen gerade gezeigt habe, können Sie zu Tools, Optionen gehen, zum C nimmt Editor, dann C-scharf als fortgeschritten und Hals bis unten. Und es heißt „Show Erbschaft March“, und es ist experimentell. Also habe ich gesehen, dass es für manche Leute funktioniert und nicht für manche Leute. Das ist nur so, dass du das aktivieren kannst. So erleichtert es die Navigation zwischen übergeordneten und Klassen, soweit die Vererbung geht, viel einfacher. Okay, jetzt gibt es eine neue Methode, die implementiert werden muss. Ich werde nur implementiert kontrollieren. Und dann werde ich hier sehen , dass wenn ich es mit Details bekomme, was Sie zurückgeben müssen, mein Kontext ist. Dot-Automodelle, Punktsuche sind keine Auto-Modelle gefunden, die enthalten, und ich habe meine Navigationseigenschaft für das Mikrofon eingebaut . Ordnung, dann am Ende all dieser LLC werden die Standardeinstellungen gespeichert. Lambda-Ausdruck, bei dem die ID im Datensatz der Idee entspricht, nach der ich suche. Wann immer wir das nennen würden, wissen wir, dass wir garantiert die Automodelle mit jedem Inclusive bekommen . Wenn wir es „Gets“ nennen, bekommt der Regular sein Generikum, sie nerven Tods. Das ist alles, was wir aus einem bestimmten Grund noch einmal spezifische Methoden für das spezifische Repository einsetzen spezifische Methoden für das spezifische Repository können. Lasst uns jetzt wieder ins Detail gehen. Und ich kann dies durch get Automodelle durch unser aktuelles Modell mit Details ersetzen . Ich weiß, wenn das Automodell zurückkommt, wird definitiv die Navigationseigenschaft für den Milchtyp enthalten sein. Für die Karten. Wir haben ein ähnliches Problem. Wir benötigen benutzerdefinierte Methoden, damit das Auto-Repository diejenigen mit Details zurückerhalten kann. Und für den Index müssen wir die Details dort angeben. Auch. Was wir tun werden , ist Wiederholung oder Füße. Wir werden einen benutzerdefinierten Vertrag und unsere benutzerdefinierte Implementierung in unserem Repository-Projekt haben. So wird der Vertrag aussehen. Ich fahre wieder ein Repository erbe vom generischen Repository relativ zum Auto. Dann haben wir unsere Aufgabe. Auto könnte Auto mit Details bekommen. Und die NOR-Implementierung wird sagen, dass Cars Repository im Verhältnis zu Auto und Vertrag vom generischen Repository erbt . So wird alles injiziert, genau wie wir es bis zu diesem Zeitpunkt gemacht haben. Und dann haben wir die Methode Auto mit Details bekommen, natürlich habe ich es asynchron gemacht und ein Gewicht und den gleichen Code, der auf der Detailseite war, ich schneide es einfach aus und füge es genau hier ein. Ich habe gewogen, dass die Kontext-Punkt-Autos alle diese Details enthalten und die erste oder Standardeinstellung erhalten. Auf unserer Detailseite können wir damit beginnen, den Kontext nicht mehr zu injizieren, aber jetzt können wir ein Auto-Repository oder ein Auto-Repository injizieren . Das wäre, ich kann das einfach nennen. Repository ist immer noch nur eines dort. Kein Problem. Repository. Fügen Sie fehlende Referenzen ein, erstellen Sie NSA und das Feld. Ich entferne alle Spuren des Kontextes und füge dann den Unterstrich hinzu, nur für meine Sicherheit wohin wir kommen. Ich sage nur, Repository-Punkt bekomme Auto mit Details und gebe ihm den ID-Punktwert. Wenn ich es vorher nicht erklärt habe, weil es klein, mehrfach ist, muss ich den ID-Punktwert sehen. Und natürlich danach. Und wie gesagt, ich habe ein paar Refactorings bei Visual Studio gemacht, um zu viele Dinge bei 1 geändert zu haben. Einige meiner Datentypen sind also falsch. Aber nachdem ich das behoben hatte und ich bin mir sicher, dass er dieses Problem nicht hatte. Sie werden hier sehen, dass mit unserer Detailseite alles in Ordnung ist. Und das sieht viel sauberer aus. Also müssen wir so etwas für den Index tun. Nun sage ich so etwas für das nächste, weil es mehrere ist, das ist eine ganze Liste mit den Details. Ich brauche hier eine andere Methode, die mir tatsächlich die Liste gibt. Aus dem Auto. Ich wollte sagen, hol Autos mit Details. Und es wird keinen Parameter bekommen. Und das sollte Liste sein. Wir holen uns die Liste der Autos mit Details. Kein Problem. Implementierung Kohlberg hier rüber, kontrollierte Lot implementieren Schnittstelle. Und ich werde diese Rückgabeerklärung hier nur wiederholen. Bringen Sie also den Kontext von Autos mit allen Includes Punktlisten zurück. Und es muss eine Sache sein, die so kontrolliert wird Make-Methode Async und mit einem Semikolon und das ist okay. Auf unserer Indexseite kann all dies also nicht Repository sein und natürlich muss ich den Konstruktor und die Injection aktualisieren . Also werde ich es einfach abkürzen. Kopieren Sie einfach einen ähnlichen, ändern Sie die paar Pfeile. Und dann kann ich feststellen ein Repository-Punkt Karten mit Details bekommt und diese natürlich nach 08 schließt. Und im Grunde scheint es die durcheinander gerichteten Datentypen zu fehlen und wir sollten loslegen. An anderen Orten. Wir werden das on post delete haben, keine Probleme. Also muss ich nichts finden. Ich muss nicht prüfen, ob Autos nein sind. Stattdessen, wenn der Datensatz ES NICHT Null IST, sehe ich das Repository. Und natürlich muss ich auf dieses Repository Dot Delete warten und wir geben ihm den Datensatz-ID-Punktwert. Das war's. Kein Code nett und sauber , den Sie nie wirklich hinter diesem programmieren wollten , während die Anweisungen und alle komplexen Operationen und so weiter. Du willst diese ALT abstrahieren. Alles, was tun sollte, ist eine Methode aufzurufen, die Tür zum Mythos zu bekommen, die harte Arbeit zu machen. Ich rufe die Methode an und warte auf die Antwort. Du machst die ganze Arbeit und sagst mir einfach , was das Ergebnis ist. Ich bin zu diesem Punkt gegangen, baue nur um sicherzustellen, dass ich alle erforderlichen Änderungen vorgenommen habe. Und ich habe einen Pfeil, weil ich in meinem Startup den falsch geschriebenen Namespace habe, aber ich muss sicherstellen, dass ich es habe. Bevor ich das Auto-Repository habe, zeige ich Ihnen, welche Art von Fehler Sie sehen werden , wenn Sie den Fehler beim Registrieren Ihres Dienstes nicht hinzufügen. Es wird also nur Control F5 laufen, um ohne Debuggen zu laufen. bekomme diesen anderen Pfeil, weil ich sanftmütig in Mix umbenannt hatte . Alles klar, also lass mich das nochmal versuchen. Steuern Sie F5. Und unsere Anwendung sucht nach Mischfarben und Modellen, nur um sicherzustellen , dass wir die Daten sehen. Also sehen wir hier, dass unsere Repositorys funktionieren. Wenn ich auf Bearbeiten klicke, nehme eine Änderung vor und speichere dann, sehen wir, dass die Änderungen erfolgreich gespeichert wurden. Wir wissen also, dass die Repositorys in dieser Hinsicht funktionieren, wenn wir uns die anderen ansehen, die sie alle wiederkommen sehen. Wenn ich also auf die Details für Modelle klicke, sehen Sie, dass das Mikrofon zustande kommt, die Details kommen zurück. Wenn ich jetzt auf Autos klicke, schließen wir all diese und klicken wir auf Autos. Schauen Sie sich das an, Sie sehen Servicetyp für i cars Repository nicht aufgelöst werden kann, während Sie versuchen, Indexpunktmodelle zu aktivieren. Das ist also nur eine ausgefallene Art und Weise. Ich werd's sehen. Sie haben vergessen, die Registrierung in die Startdatei zu legen die Registrierung in die Startdatei , weil wir das nicht getan haben. Man merkt, dass bei Modellen alles gut funktioniert hat. Alle von ihnen funktionieren gut für das Modell. Es ist das gleiche Konzept. Weil wir uns also nicht registriert haben, also sage ich einfach, dass das Auto-Repository vom Auto-Repository implementiert wird. Füge irgendwelche fehlenden Referenzen hinzu oder tut mir leid, das sind Autos. Vergiss das weiter. Das ist Auto-Repository. Da sind wir los. Ich kann einfach einen Build machen und die Seite aktualisieren oder in D neu schreiben, ohne zu debuggen und auf die Kursseite zu klicken . Ich weiß, dass es geladen wird. Sie sehen, dass das einen Fehler blockiert. Wenn Sie Ihre Service-Registrierung vergessen haben. Und im weiteren Fall, sieh dir das an. Wir sehen alle unsere Details. Wenn Sie zu Bearbeiten gehen, sehen wir alle Details. Wenn wir gehen, um eine kaskadierende Dropdown-Liste zu erstellen eine kaskadierende Dropdown-Liste arbeiten Sie weiterhin so, wie wir es erwarten. In Ordnung, das sind also kleine Veränderungen, die Sie unseren eigenen Zweifelurlaub machen möchten. Das ist der Schlüssel etwas sauber. Aber nicht weil du einen Hammer hast, sollte alles wie ein Neil aussehen. Oft lernen wir ein Muster und das Kirchenschiff, das wir sehen, haben wir diesen Knopf benutzt. Einige Anwendungen sind einfach genug, dass Sie diese Abstraktion und Komplexität nicht hinzufügen müssen. Aber am Ende des Tages sehen wir, wo es definitiv hinführt. Eine Firewall, die erhöht Wie wartbar die Anwendung. Das wird er sein. 29. Repository: In Ordnung, also wenn Sie einen anderen Meilenstein drehen und wir in das GitHub-Repository einchecken. Lassen Sie uns also einfach eine kurze Zusammenfassung dessen machen, was wir in diesem Abschnitt durchgemacht haben. Erstens hatten wir festgestellt, dass wir einen Teil der Quartalwiederholung reduzieren und die allgemeine Wartbarkeit und Testbarkeit unserer Anwendung erhöhen wollen der Quartalwiederholung reduzieren und die allgemeine Wartbarkeit und Testbarkeit unserer Anwendung erhöhen die allgemeine Wartbarkeit und Testbarkeit . Schritt Nummer eins dazu war also das Erstellen oder Repositorys. Also haben wir das erstellt, was wir als generisches Repository bezeichnen, das sehr, was soll ich sagen, nein, generisch für eine, aber sehr abstrakte Möglichkeiten zur Deklaration der gezeigten Grundform war generisch für eine, aber sehr abstrakte Möglichkeiten zur Deklaration der , dass jedes einzelne Datenbank-Element benötigt wird ausführen. Auf diese Weise konnten wir zwei Dateien verwenden, um viele Datenbanktabellen zu kompensieren. Zwischen dem generischen Repository unter dem generischen Repository haben wir also unter dem generischen Repository genügend Codeabdeckung für fast jedes der grundlegenden Szenarien für jede unserer Tabellen in der Datenbank. weiteren Verlauf können wir entweder bestimmte Dinge automatisieren , die wir in einem benutzerdefinierten Monitor tun mussten , oder an einer Reihe von Orten. Jedes Mal, wenn wir ein Element erstellen, konnten wir dies automatisieren, unabhängig davon, welches Element erstellt wird , oder wir wissen, wie wir es zur Basisdomänenentität bringen können, die jedes Element sein wird. Jede oder andere Einheit wird es sein. Und wenn es hinzugefügt wird, können wir alles ändern, bevor wir es tatsächlich in die Datenbank übertragen . Das sind also sehr wichtige Operationen bei dem, was wir tun. Nachdem wir unsere generischen Repositories hatten, stellten wir auch fest, dass es bestimmte Operationen gab , die eine benutzerdefinierte Berührung benötigten. Anstatt also das generische Zeug zu berühren, gehen wir in den Kopf und dehnen es aus. So in der Lage zu sein, eine Klasse zu erweitern , ohne die Hauptklasse zu ändern, das ist das Liskov-Prinzip und das ist das L in solidem. Wir betrachten die Abhängigkeitsinjektion, da wir nirgends Objekte erstellen, die nach Belieben injiziert werden können , trocken schauen, was sich nicht wiederholt. Wir beschäftigen uns mit der Schnittstellentrennung, weshalb wir all diese Verträge und ihre Implementierungen haben . Anzahl der Prinzipien, die in das Vierjahr eingehen. Was wollen wir also verlängern? 104 implementierte bereits Repositorys und sah ohne das Overlay, änderte es und sah okay, generisches Repository, Haushaltsgegenstände, die etwas anderes spezifisch sind. Wir erstellen unsere spezifischen, ich bin ein Auto-Modell-Repository mit nur Fahrzeugmodell-bezogenen Vorgängen, die wenig Anpassung erfordern. Wir haben die Implementierung und wir haben auch das Auto-Repository. Ich habe gesagt, ich denke unser Vorgängermodell, dass es schön wäre wenn wir ein Auto hinzufügen, um zu sehen ob der Lizenzaufteilung existiert, und wenn ja, füge es nicht hinzu, ich füge es nicht hinzu, ich erinnere mich, dass es so wäre schön zu machen. Wir haben es nie geschafft. Schauen wir uns einfach an, wie das aussehen würde. Wieder einmal, jedes Kostüm, das du brauchst, wirst du es in das relative Repository legen. In diesem Fall werde ich das einfach duplizieren. Sorry, das ist Automodell, das ich in Autos wollte. Also werde ich diese Methode duplizieren. Dies wird nur einen booleschen Wert zurückgeben. Boolean wird sehen, dass Get car ist Lektion Split existiert. Dies wird ein extremes Kennzeichen erfordern. Ich sage einfach, spiel es Nummer. Das ist sein Parameter. Wenn wir noch einmal innerhalb der Schnittstelle haben, gehen wir zur Implementierung über. Und dann wird es abgeschlossen und wir gehen zu Control Dots, lassen Sie es die Schnittstelle implementieren. Und dann kann ich den Kontext zurückgeben. Bitte schau in den Autotisch und sag mir, ob es welche gibt. Und natürlich benutzen wir unser Asynchron. Jedes asynchrone Q-Punkt-Nummernschild entspricht dem übertragenen Kennzeichen. Obwohl es sich um eine Zeichenfolge handelt, möchten Sie wahrscheinlich alles senken da sich Großbuchstaben von Kleinbuchstaben zu niedriger unterscheiden . Eine andere Sache, die Sie tun möchten, ist wahrscheinlich, es von jeglichen Arten zu schneiden , die sich auf dem Altar befinden könnten. Erreicht. Da diese beiden das tun, was in der Datenbank ist, wollten Sie es auch mit dem Wert, den es möglich ist. Alles wird Kleinbuchstaben sein und alles wird von allen Whitespaces getrimmt. Und dann werden wir prüfen , ob es welche gibt. Also muss ich auf diese Punktsteuerung warten. Die Methode Async. Das ist jetzt erweitert, nett und einfach. Wenn wir diesen Check-Knoten in unsere Create und nach Erweiterung integrieren wollten , ist der Bearbeitungsvorgang. Was ich tun kann, ist hier meinen eigenen Check durchzuführen, um zu sehen ob ich im Score-Repository oder im Auto-Repository-Punkte sehen kann . Fange einfach an, Lektionen zu tippen, bis ich es sehe. Was ich nicht bin, ich sehe nichts weil dies immer noch das Generikum ist. Kein Problem. Ich benutze mein Kostüm. Ich fahre das Repository und ich kann das überall ersetzen , damit die Injektion richtig funktioniert. Okay. Jeder ist gut. Sono Art und Weise. Wenn ich zurückblicke, würde ich sehen, dass ich Zugriff auf die benutzerdefinierten Methoden habe , die weniger als Split existiert. Und dann würde ich das Autokennzeichen geben das Autokennzeichen , das aus dem Formular kommt. Wenn es existiert. Was ich tun wollte, ist, den Modellstatus ungültig zu machen da kein Nummernschild vorhanden ist, es ist gültig. Ich möchte, dass es ungültig ist. Dies ist vorhanden, also kann ich Modellstatus, Punkt-Add-Fehler, Modellfehler sagen . Und das braucht zwei Parameter. Es besagt, in welchem Feld ich das Fehlertool hinzufügen soll und was ist der Fehler für das Feld? Sie können eine Zeichenfolge verwenden, aber dann zeige ich Ihnen die Gefahr oder eines der Probleme, die den Stream so verwenden. Das ist in Ordnung. Ich möchte, dass es zu diesem Feld hinzugefügt wird. Und die Nachricht sollte sagen, dass Nummer der Lizenz bereits vorhanden ist. ich den Modellfehler hinzugefügt habe und es zu dieser Anweisung kommt , wird festgestellt, dass er nicht gültig ist, weil ein Fehler vorliegt. Ich hab's geschafft. Und dann wird der pH-Wert neu geladen der den Fehler unter dem Feld anzeigt. Damit kannst du experimentieren. Das werde ich nicht wirklich testen. Das ist nicht der Punkt, den ich zu drängen versuche. Was ich über das Feld gesagt habe, ist, dass wir aufgrund starker Eingabe und wenn es ein Fall ist in dem wir den Namen dieses Feldes ändern, daran denken müssen dass wir die Zeichenfolge aktualisieren müssen. Es würde sich nicht automatisch ändern. Um das starke Verlangen nach dem zu halten, was wir tun, ist, den Namen zu sehen den wir im direkten Namen der Variablen übergeben. Es wird es also einfach in Nummernschild umwandeln und wissen, dass dies die Außendienstfrauen sind. Dies ist die Fehlermeldung. Kein Problem. Ich zeige nur, wie einfach es zu wissen , um die Funktionalität einfach zu erweitern. Es wurde bereits injiziert. Alles was ich getan habe, war den Datentyp zu ändern, bei dem es sich um eine einmalige Operation handelt. Da Sie es erweitern müssen, fügen Sie einfach andere Methoden ein, die Sie verwenden, um es zu tun. Das ist alles, was erforderlich wäre, um diese Funktionalität zu erweitern, damit Sie sie testen können. Wie ich schon sagte, das müssen wir auch im Edit tun. Lassen Sie mich das einfach tun und stellen Sie sicher, dass wir volle Deckung haben. Vor diesen Beiträgen. müssen wir machen. Kiara-Repository ist wieder das Generikum. Also muss ich hier drüben sagen, ich Auto-Repository. Alles klar. Ändere das. Ich denke, ich habe Repositories vielleicht einen eigenen Namespace, aber das repariere ich. Das ist in Ordnung. An diesem Punkt. Das ist alles, was wir wirklich tun müssen, um sicherzustellen , dass unsere Verträge und alles erweiterbar sind. Also kannst du weitermachen und das testen. Tut mir leid, ich versuche nur herauszufinden, was ich ändern musste. Was sind andere. Schließen Sie das Auto-Repository ein. Entschuldigung. In Ordnung, also ist IQR Repository und dann sollte alles in Ordnung sein. Es werden Anweisungen verwendet, die benötigt werden, alle Fehler sind verschwunden und die gleiche Art der Validierung passiert, wenn wir bearbeiten. So einfach ist es, aufgrund unserer benutzerdefinierten Datenbankmethoden benutzerdefinierte Validierungen hinzuzufügen aufgrund unserer benutzerdefinierten Datenbankmethoden benutzerdefinierte Validierungen . Bei uns. Das war's, ich bin fertig. Lass uns mit guten Änderungen gehen. Wieder einmal sollten Veränderungen in der Gesellschaft sein. Wenn nicht, gehen Sie zur Ansicht und rufen das Fenster auf, holen Sie sich Änderungen ab. Sie geben Ihre Commit-Nachricht ein. Und dann kannst du einfach alles verpflichten und sinken. Dadurch werden Ihre Änderungen an GitHub weitergeleitet alle von Ihren Kollegen vorgenommenen Änderungen entsprechend zurückgezogen . 30. Benutzerauthentifizierung: Leute, willkommen zurück. An dieser Stelle haben wir eine Menge Funktionen, die für uns arbeiten. Und obwohl es nicht so schick erscheint, Sie zu der Erkenntnis gekommen oder kaufen Sie wissen sind Sie zu der Erkenntnis gekommen oder kaufen Sie wissen, dass alle Anwendungen tun, aus der Datenbank lesen, Daten aktualisieren, Daten dort ablegen oder Daten entfernen. Das ist alles, was wirklich dazu da ist. Es spielt keine Rolle, wie kompliziert es erscheinen mag. Alle Gelder essen mögen scheinen. Das ist alles, worauf es ankommt. Wenn Sie diese Anwendung erweitern möchten, um mehr Dinge zu tun mehr Tische zu platzieren, heißt es Autobuchung. Und uns heute Es ist alles, was wir tun, ist die Autos einzubauen. Wenn Sie in der Lage sein möchten, die tatsächliche Buchung einzugeben , ist kein Problem. Schauen wir uns das an. Bevor ich Sie jedoch in diese Beta-Funktionalität einfüge, wollte ich die Anwendung in gewissem Maße sichern, da wir keine brauchen. Wir müssen wissen können, wer was in unserer Bewerbung macht. An diesem Punkt kann jeder einfach die Anwendung ausführen und Autos hinzufügen mir aufregende Modelle hinzufügen. Wir möchten bestimmte Dinge auf einen registrierten Benutzer beschränken , den wir kennen. Und später haben wir uns angeschaut, wie wir zwischen den verschiedenen Benutzern sitzen können , die Dinge in unserer Anwendung tun können. Wir werden damit beginnen , unseren DB-Kontext zu erweitern , um benutzerbezogene Vorgänge bewältigen zu können . Das ist eigentlich einfacher als es klingt. Alles, was wir tun müssen, ist statt DB-Kontexte zu sagen, sagen wir Identität, DB-Kontext. Identität ist das Framework oder die Bibliothek , die uns von Dotnet Core gegeben , um benutzerbezogene Operationen zu unserer Anwendung hinzuzufügen . Indem ich also den Identity DB-Kontext für die Vererbung sehe , kontrolliere ich Punkte. Sie werden sehen, dass ich ein paar neue Bibliotheken einschließen muss. Wir verwenden NuGet Weekend, um Paket zu installieren, Buds zu finden und zu installieren. Denken Sie daran, dass wir einige Versionsprobleme mit dem Entity Framework Core und der Version der Bibliothek hatten. Es ist tatsächlich sicherer, NuGet einfach manuell zu verwenden. Also klicke ich mit der rechten Maustaste auf NuGet-Pakete verwalten. Und für unsere Installierte wissen wir, dass wir gerade mit 5.8 arbeiten. Also gehe ich zu Bros und suche nach Identität. Ich sage nur, dass ich Identität, Identitätskern war und dann sehen wir Microsoft.ASP.Net Core-Identität zu Entity Framework Core. Das ist also der, den wir wollen und dann haben wir es mit 5 zu tun. So verwenden Sie den NuGet-Paketmanager, um sicherzustellen , dass sich alle Versionen auf derselben Leber befinden. Dann klicke ich auf Installieren, erlaube es, sein Ding zu machen, akzeptiere alle auftretenden Probleme. Wenn das erledigt ist, kann ich zurück zu meinem DB-Kontext springen und die fehlende using-Anweisung einschließen. Los geht's und alle sind glücklich. Alles klar, sieht bisher gut aus. Nein. In unserem beginnt es mit der Akte. Wir werden sehen, dass wir hier einen kleinen Fehler haben , wo wir die DB-Kontexte hinzugefügt haben. Und es heißt, dass wir die using-Anweisungen brauchen. Also gehe ich einfach zu Kontrollpunkten. Und es heißt, installieren Sie das Paket auf diese Daten oder fügen Sie einfach ein Referenzwerkzeug hinzu. Ich füge einfach die Referenz hinzu. Vielmehr verwende ich einfach eine lokale Version. Also verwende ich einfach die lokale Version. Und das ist eine weitere Stärke des Paketmanagements. Damit können wir sicherstellen, dass wir es nicht tun, dass alle unsere Versionen auf dem gleichen Niveau sind. Also wisse, dass der Fehler verschwunden ist und immer noch im Start ist. Und was wir tun müssen, ist das Startup wissen zu lassen, dass wir Identitätsdienste in der Anwendung verwenden werden. Also sagte ich, dass Services Dot Add die Standardidentität sehen sollte. Wenn nicht, dann bei Identität, los geht's. Sie können also Identitätskern hinzufügen. Hinzufügen von Identitätskernwissen sagen sie, welche Benutzertypen, der Standardbenutzertyp Sie mit Identitäten erhalten , Identitätsbenutzer. Und wir haben uns angeschaut, wie dies in wenigen erweitert werden kann. Aber wir fügen einfach hinzu Identitätsbenutzer die fehlenden using-Anweisungen eingefügt hat, und dann können wir Optionen weitergeben , wenn wir möchten. Wenn ich also sage, dass es Optionen übergeben kann, sehe ich Optionen mit einem Lambda-Ausdruck, Optionen. Und wir können verschiedene Optionen erforschen, die wir für unsere Benutzer nutzen möchten. Und es gibt Zapfen. Was wir zum Beispiel tun werden, ist, Optionen für eine Anmeldung zu sehen , dass ein Kegel bestätigt wird, um zu wissen, wie wenn Sie sich für unsere Website anmelden, und sie senden Ihnen die Tolkien, um zu sagen, bitte bestätigen Sie den Doppelpunkt ist, was ist bis zum Fälligkeitsdatum. Du kannst dich nicht wirklich einloggen. Nun, das können wir hier durchsetzen. Ich sehe ein bestätigtes Konto erforderlich. Standardmäßig wird es erforderlich sein. Also werde ich eigentlich nur sagen „gleich falsch“. Nur weil es sich um eine interne Anwendung handelt, werde ich wahrscheinlich nicht die Strapazen durchgehen jemanden bitten, seine Kegel zu bestätigen. Aber ich zeige dir nur, was möglich ist. Sie haben also eine Reihe von Optionen zur Verfügung. Und wenn Sie mehrere festlegen müssen, können Sie dies einfach mit einem Objektblock tun. Und Sie beenden jede Zeile mit einem Semikolon und fügen so viele Optionen hinzu, wie Sie möchten. Wir fügen Identitätskern relativ zum Identitätsbenutzer hinzu, dem es sich um eine Standardbenutzerklasse handelt, die uns durch Identity Framework oder Identity Core andere gegeben wird. Und dann können wir Regeln hinzufügen sagen. Wenn wir Regeln verwenden wollten, können wir sagen, dass ich Regeln für die Zeilenklasse verwenden möchte. Es gibt eine Standardeinstellung in der Identitätsregel. können wir noch einmal anpassen. Ich passe das im Allgemeinen nicht an, um ehrlich zu sein, verwende ich normalerweise eine Standardregel. Am Ende müssen wir es mitteilen , Entity Framework-Stores hinzufügen. Also muss ich ihm sagen, wo speichern wir unsere Benutzerinformationen? Es würde also wirklich nach unserem DB-Kontext fragen. Mit welchen Kontexten sollte ich ableiten , in welcher Datenbank ich die benutzerbezogenen Tabellen speichern muss . Nun ist die Sache daran, dass manche Leute dieselbe Datenbank gerne für anwendungs- und benutzerbezogene Dinge verwenden . Manche Leute trennen sie. In dieser Aktivität halte ich es einfach und verwende denselben Kontext sowohl für das normale Zeug als auch für die Benutzersachen. einmal trennten sich einige Leute. Wenn Sie es also trennen möchten, erstellen Sie einen anderen DB-Kontext. Genau wie alle haben wir das hier. Was können Sie tun, ist, dass dieser nur von DB-Kontexten erbt wird und weitere DB-Kontexte erstellt wird , die von Identity DB-Kontexten erben. Es würde keine Tabellen brauchen, weil Sie sehen werden, wie Gerechtigkeitsvererbung uns die Tische geben wird, die wir wollen. Und dann wäre es dir gut. Und natürlich müssten Sie die andere Verbindungszeichenfolge hier haben . Und Sie richten Ihren DB-Kontext entsprechend oder Ihren Identitätskontext entsprechend ein. Es braucht ein paar Teile der Konfiguration, aber wieder einmal, der einfache Pfad mit einer Datenbank, haben wir den Kontext bereits. Wir brauchen nur diese drei Zeilen. Und dann können wir Identity Services Store-Anwendung hinzufügen. Und es wird wissen, dass es auf diesen Datenbankkontext achten sollte, um alle seine Konnektivitätsanforderungen zu erfüllen. Okay, also wenn all das erledigt ist, können wir zu unserer Package Manager Console gehen. Und wenn wir das offen und laufen lassen, können wir das Standardprojekt wie wir wissen ändern. Wir setzen es auf Daten. Und ich sage „Add My Azustimmen“. Ich habe Benutzertabellen gemacht. Beachten Sie jetzt, dass ich nichts getan habe. Ich habe keine neue Entität erstellt. Ich habe nicht Das einzige, was ich mit dem DB-Kontext gemacht habe , um die Vererbung zu ändern. Aber schauen Sie sich die Migrationsdatei an, die ein Boot ist , das generiert werden soll. Also bekommen wir eine Migra-Migration. Sieh dir die ganze große Aggregation an. Inzwischen sollten Sie mit Migrationen vertraut sein, wie sie aussehen. Ich werde nur darauf hinweisen, welche Tabellen erstellt werden. Einen für die Regeln bekommen, eine für die Benutzer. Und Sie sehen alle Felder , die für den Benutzer generiert werden. Und all diese beziehen sich auf Identitätsbenutzer. also nur Identitätsbenutzer hier sehen, erhalten wir alle diese Felder Rove-Ansprüche, Benutzeransprüche und eine Reihe anderer Tabellen mit einer Reihe von Dingen. Einige von ihnen, die Sie vielleicht nie tatsächlich verwenden, erstellt die Indizes und irgendwelche Fremdschlüssel. Und dann macht das alles natürlich nicht einfach rückgängig. Das ist es, was nur die Vererbung aus VB-Kontexten ändert , diesen Identitäts-DB-Kontext, das ist es, was die Änderung ergibt. Innerhalb der Package Manager-Konsole. Wenn ich die Datenbank aktualisiere und erlaube, dass sie mit der Datenbank zurechtkommt, werden Sie in der Datenbank bemerken , dass wir eine Reihe neuer Röhren bekommen, die sagen, wenn ich nur eine schnelle Aktualisierung mache und nachschaue in der Datenbank und den Tischen, die wir haben. Sie werden sehen, dass alle diese neuen Tabellen der Datenbank hinzugefügt werden. Lass das einfach da drauf. Sie legen Ihre Benutzertabellen ein. Es weiß, wo die Benutzerinformationen gespeichert werden müssen, und Sie mussten sich nicht hinsetzen und keinen benutzerdefinierten Code schreiben. Und jeder benutzerdefinierte Code , den Sie schreiben werden, liegt wirklich an Ihren geschäftlichen Anforderungen. Weil er die meisten davon reparieren wollte, aber aus dem Tellerrand heraus, treffen Identitätsbibliotheken dieses Soul Paul Essen und so einfach. Wenn wir also zurückkommen, haben wir uns angesehen, die Tabelle unseres Benutzers zu erweitern , da die Benutzer gerade stabil sind, ja, es hat viele Spalten, es hat viele Spalten, aber Sie werden feststellen, dass es sich nicht unbedingt nützliche Spalten handelt Begriffe wie ein Geschäftsumfeld oder Ideen. Wir haben einen Ausweis, ja oder nein. Ich benutze einen Namen und eine E-Mail, aber wir kennen den Namen der Person nicht . Ich weiß nicht, was es benutzt. Dies basiert nur auf ihrem Namen, FirstName, LastName, sogar Geburtsdatum, allem, was Sie sowohl den Benutzer speichern als auch nur diese Anwendung vorstellen möchten , da eine Anwendung verwendet wird begleiten Sie jedes Unternehmen , in dem Sie sich befinden. Sie möchten wissen, wer Sie sind, wenn Sie sich anmelden. Sie wollen nicht alle Informationen sehen können . Nun, hier fängt es an, es zu speichern. Wenn Sie in diesem System erstellt werden , werden sie normalerweise in Ordnung gebracht. kommen wir zurück und schauen uns an, Dann kommen wir zurück und schauen uns an, wie wir den Tisch nach Belieben erweitern können. 31. Benutzer-Tabelle erweitern: Alles klar Leute. Als wir das letzte Mal hier waren, haben wir versucht, die Identitätstabellen in unserer Datenbank einzurichten. Jetzt müssen wir wissen, wie wir diese Tabellen erweitern können , um verschiedene Felder zu übernehmen. Wir beginnen mit dem Identitätsbenutzer. Es schließt einige Felder, was ich mehr Felder will. Eine einfache Möglichkeit, dies zu tun, wäre in den Daten, erstellen Sie einfach einen neuen Ordner. Ich werde Identität sehen , damit wir wissen, dass alles in diesem Loch identitätsbezogen ist. Also habe ich eine Klasse, also kannst du die Klasse irgendetwas nennen. Also der beliebteste Name, den Sie sehen würden, seinen Anwendungsbenutzer. Aber wie heißt du noch einmal? Es liegt an Ihnen und Ihrem Betrieb und Ihrem Ziel. Sagen wir mal Anwendungsbenutzer. Es ist eine öffentliche Klasse , die die Charaktereigenschaften eines Identitätsbenutzers erben wird . Identitätsbenutzer, der Standardbenutzer, werde ich sagen, Ordnung, nun, Sie haben alles, was ein Standardbenutzer hat. Aber du hast auch, können wir anfangen String Vorname, Nachname einzugeben . Wenn Sie einen Mitarbeiterausweis eingeben möchten, sind immer noch Flug oder irgendetwas für diese Person eindeutig. Also höre ich bei Vor- und Nachnamen auf. Geburtsdatum, ich denke, das Hinzufügen des Geburtsdatums wäre eine nette Aktivität. Geburtsdatum. In Ordnung, das war's. Nein, wir brauchen eine Verpflichtung, der Benutzer zu sein , wenn wir unsere Vorgänge ausführen, dass wir Zugriff auf die zusätzlichen Felder auf der Codeseite haben , aber wir müssen auch erweitern die Datenbank, die tatsächlich in diesen Feldern gespeichert werden soll. Bei einem Startup muss ich den AD Identity Core ändern, um nur Identitätsbenutzer zu sehen Programmcode zu sehen, wenn wir irgendetwas von Benutzern, Benutzerbeziehungen tun , sondern es wird diesen Datentyp verwenden und uns Zugriff auf diese Felder gewähren. Für die Datenbank müssen wir zu unserem Kontext und späteren Identitäts-DB-Kontext oder zu Angriffsklammern zurückkehren Identitäts-DB-Kontext oder zu Angriffsklammern , die sie verwenden sollte. Und wenn du den Typ Klammern ansiehst, gib mir den T-Benutzer. Wenn ich eine Karte ausprobiert habe, würde Let's IV Auto funktionieren. Sie wollen nur eine Klasse, wenn ich ein Auto benutzt habe, nein, die Ära verschiebt sich, er würde sagen, dass sie nicht als Typparameter für t Benutzer verwendet werden kann . Das hieß es. Denken Sie daran, wenn wir über Generika und die Datentypen sprechen , heißt es T-Benutzer, wo der Benutzer vom Typ Identitätsbenutzer ist. Es muss also eine Entität sein , die vom Typ Identitätsbenutzer ist, wie der Anwendungsbenutzer , den wir einfach erben lassen. Also kann ich wissen, den Anwendungsbenutzer dorthin stellen und alle sind glücklich. Wisse, dass der DB-Kontext weiß, dass ich den Anwendungsbenutzer verwende, wenn ich eine neue Migration mache. Also sagte ich, ich habe Benutzer gemacht, ich habe mehr Benutzerfelder als meine Migration gemacht. Er wird wissen und sagen, okay, ich habe es mit einem neuen Datentyp zu tun. Und dieser neue Datentyp hat Spalten, die ich nicht berücksichtigt habe, wie Geburtsdatum, FirstName und LastName. Bitte mach weiter und füge sie zur Datenbank hinzu. Diese Spalte wird der Tabelle der ASP NET-Benutzer hinzugefügt. Diese Kolumnen. Wenn ich das Update mache, wird es erfolgreich abgeschlossen. Und wenn ich dann auf meine Idee zurückblicke, stabil zu sein, nach einer schnellen Aktualisierung wissen, werde ich nach einer schnellen Aktualisierung wissen, dass meine neuen Felder gut in der Tabelle der ASP NET-Benutzer angezeigt werden. Vorname, Nachname und Geburtsdatum. So können Sie Ihre Klassen erweitern wenn Sie mit den benutzerbezogenen Vorgängen zu tun haben. Nur um ihn zu sehen, hätten wir die Identitätsregel erweitern können. Was wäre, wenn die Regeln stabil nicht genug Informationen oder so viele Informationen hätten genug Informationen oder so viele Informationen wie Sie es sich gewünscht hätten. Alles, was es hat, ist eine Benutzer-ID. Tut mir leid, das ist der falsche. Sie Rollen, Rollen sie sind her Regeln haben normalisierten Namen, chronisches Organsystem genannt . Ich weiß nicht, was Sie wahrscheinlich noch hinzufügen möchten, aber ich zeige Ihnen nur, dass wir den Anwendungsbenutzer um die Vererbung erweitern und dann verwenden können Anwendungsbenutzer um die Vererbung . Off ist die gleiche Weise, wie Sie Rollen oder alles erweitern können , das die Präfix-Identität ziemlich vor sich hat. Alles, was wir getan haben, ist nur die Konfiguration. Wenn wir wiederkommen, werden wir uns ansehen, wie wir unsere Registrierungsseite einrichten und Benutzer einloggen können . 32. Setup: Leute, willkommen zurück. Das letzte Mal, als wir hier waren, haben wir darüber gesprochen, die Benutzer tatsächlich registrieren zu lassen und sie sich anmelden zu lassen. Also werde ich einfach alles zusammenbrechen, an das wir uns anschnallen werden oder an welches Projekt ich alle Tabs schließen werde , die nicht direkt benötigt werden. Und innerhalb unserer App kann ich mit der rechten Maustaste klicken und zu Hinzufügen gehen. Und ich sehe einen neuen abgenutzten Gegenstand. In diesem Dialogfeld sehen Sie jetzt, dass es eine Kategorie gibt, die „Identität“ sagt. Wenn ich auf Identity doppelklicke, wird es sein, dass es überprüft wird. Und dann entwickelt es sich weiter zu dem Bildschirm, auf dem „Identität hinzufügen “ steht. Sie können alle Dateien überschreiben. Die Sache ist also , dass wenn Sie die Vorlagendatei tatsächlich erhalten , sie nur vor Ihnen verborgen sind, weil wir nirgends Anmelde - oder Registrierungsseiten gesehen haben, sie sind irgendwie versteckt. Aber wenn wir sie überschreiben wollen, können wir leicht sagen, dass wir außer Kraft setzen wollen oder wir können diejenigen auswählen, die wir überschreiben möchten. In dieser Situation möchte ich die Registrierungsseite und den Kontext, den sie relativ zu seinem DB-Kontext für die Autobuchung sein sollte, außer Kraft setzen seinem DB-Kontext für die Autobuchung sein sollte . Ich muss die User-Klasse oder irgendetwas anderes für nein nicht hinzufügen oder irgendetwas anderes für nein nicht Alles was ich will ist eine Registrierung. Und dann kann es weitergehen und auf Hinzufügen klicken. Es wird eine Weile dauern, das Gerüst zu machen. Natürlich. Wenn es fertig ist, bekommen wir diese README-Datei. Okay? Das brauchen wir nicht wirklich, aber wenn Sie hinschauen, werden Sie sehen, dass wir einen neuen Ordner namens Areas haben. Und wenn Sie einen Drilldown durchführen, sehen Sie Identitätsseiten und dann erhalten Sie ein paar neue Wähler. Machen Sie diese Registrierungsdatei nicht. Und wenn Sie es bemerken, ist dies auch eine Razor-Seite. Standardmäßig ist diese Uber unabhängig von der verwendeten Projekttemperatur ein pH-Wert . Schauen wir uns also an, welches Register uns das CSS gibt. Html5 gibt uns ein Formular , in dem wir eine Eingabe für E-Mails auf Fußwegen erhalten für E-Mails auf Fußwegen denen sie das Passwort bestätigen wollten. Wir wissen, dass wir andere Bereiche haben, die wir brauchen, also können wir dies immer nach Bedarf erweitern. Im Registercode dahinter werden Sie feststellen, dass er injiziert wird. Ja, es fragt uns nach dem DB-Kontext, aber beachten Sie, dass es keinen DB-Kontext injiziert. Stattdessen injiziert es das, was wir als Anmeldemanager und Benutzermanager bezeichnen . Sie sind relativ zum Anwendungsbenutzer. Ich zeige dir nur, dass alles verbunden ist. Die Argumentation, den Anwendungsbenutzer und nicht den Identitätsbenutzer zu sehen , befindet sich beim Start. Wir haben ihm mitgeteilt, dass, wenn Sie Identität hinzufügen, alles, was mit der Identität zusammenhängt, Anwendungsbenutzer verwenden. Kein degenerierter Code weiß also, dass es sich nicht um Identitätsbenutzerspannung handelt, ist Anwendungsbenutzer. Beachten Sie, dass dies keinen Pfeil da sie austauschbar verwendet werden konnten. Ich werde jedoch nicht gegen den generierten Code und mir die Tatsache ansehen , dass wir sowohl den Anmeldemanager als auch den Benutzermanager haben . Dies sind also integrierte Bibliotheken, die uns von der Identity Core Library zur Verfügung gestellt werden. Das ist das niedrigste, das Handle-Signatur-bezogene Vorgänge und alles, was im Grunde genommen vom Benutzer bedient wird, erhalten Benutzerbezogene , Entschuldigung, Operationen, Anrufen eines Benutzers, Ändern von etwas über den Benutzer usw. Also wird hier alles injiziert und Sie werden sehen, dass es einen E-Mail-Absender gibt. Wir haben noch keine E-Mail-Dienste implementiert. Dies ist wirklich nur ein Platzhalter , der später überschrieben werden kann. Wir bekommen auch den Eye Logger, sich auf die Seite bezieht, auf der wir uns befinden. Wenn Sie oben bemerken, haben wir dieses Attribut, das sein erlaubt anonym. Wir schauen uns also später mehr Attribute an wenn wir darüber diskutieren, wie wir Auth0 authentifiziert im Vergleich zu bestimmten Teilen der Anwendung zulassen können Auth0 authentifiziert im Vergleich zu bestimmten Teilen der Anwendung zulassen , anstatt wie wir bestimmte Teile des anwendung. Also lasst uns weitermachen. In diesem Modell, das für uns generiert wurde, sehen Sie, dass wir Immobilien über diesem Input gekauft haben. Das ist also ein Muster , das wir schon einmal gesehen haben. Wenn wir auf unseren Seiten schauen, sehen wir, dass wir für das Create bereits etwas getan haben, etwas Ähnliches wie diese Eigenschaft über das gesamte Modell namens Auto generiert haben. In dieser Situation werden Sie jedoch feststellen, dass das Modell tatsächlich ein Eingabemonitor ist genau hier innerhalb der Seite definiert ist, eine Klasse in uns ugandische Buff Patterns, aber ich zeige sie nur für dich , obwohl es etwas anders aussieht, ist es das Gleiche. Du wirst einen Kurs haben. Und diese Klasse hat die gleichen Attribute, die wir benötigt hatten. Dies ist Anämie-Adresse, dies ist ein Anzeigename, von dem wir wollen , dass wir alle zuvor verwendet und es ist nur eine Eigenschaft namens E-Mail, in der einige andere gesehen werden, aber es sind dieselben Dinge. Wir haben die Überprüfung der Zeichenfolgenlänge und dieses ist ein Passwort, und dann sagt dieses, dass es ein Passwort ist und es sollte mit dem Passwort nach oben vergleichen mit dem Passwort nach oben und diese Fehlermeldung anzeigen, wenn sie stimmen nicht überein. Das ist alles. Deshalb haben wir nur drei Felder im Eingabemodell, die im Formular verwendet werden. Aus diesem Grund ist das Formular an den Eingabe-Punkt-E-Mail-Eingabe-Punkt Pass oder es gebunden . Geben Sie den Punkt ein Passwort bestätigen. Dann außerhalb von all dem und get, es braucht nur eine Rückgabe-URL, wir können einige dieser Codezeilen wie diese, externe Logins und so weiter loswerden . brauchen wir nicht unbedingt. Zumindest werden wir sie im Rahmen dieses Kurses nicht einrichten. Aber nachdem das Formular gesendet wurde, sehen wir hier, dass, wenn der Modellstatus gültig ist, gültig ist, relativ zu all diesen Attributen oben ist. Wir erstellen einen neuen Anwendungsbenutzer, der an Details weitergibt , die aus dem Formular Benutzernamen und der E-Mail-Adresse stammen. Und dann kreieren wir. Also hier ist unser User Manager. Dot create Async, einen neuen Benutzer, der das eingegebene Passwort verwendet. Wissen Sie unwichtige B2B oder Passwörter ist, dass Sie Kennwörter niemals im Klartext in der Datenbank speichern? Ja, der Benutzer kann das Wort nur eingeben , wenn Sie Pastor eingeben, ist der einzige Typ in den Wörtern und den Zahlen, wie Sie sie kennen. Wenn Sie jedoch sehen würden, was in einer Datenbank gespeichert wurde, sollten Sie es niemals erkennen. Das heißt, das ist die Verteidigung Nummer eins gegen Hacker. Hash deine Passwörter. Wissen Sie das Gute an diesen Bibliotheken, dass durch den Aufruf dieser Methode alles hinter den Kulissen für Sie erledigt wird. Sie müssen sich also nicht einmal um die Sicherheit des Passwortspeichers kümmern die Sicherheit des Passwortspeichers sobald Sie diese Methode verwenden, um den Benutzerdatensatz zu erstellen und ihm das vom Benutzer eingegebene Passwort zu geben . Wenn die Person erfolgreich erstellt wurde, haben Sie das einfach protokolliert und dann generieren wir den Code. Wenn wir also darüber sprechen, bestätigen Sie Ihre E-Mail-Adresse und wir senden Ihnen die E-Mail zu. Dies ist der Code, der diese Art von Sprechen hinter der LINQ-Abfrage generiert , die zur Bestätigung verknüpft ist. Alles klar, also bitte bestätige ihre Kegel, indem du hier klickst. So sieht diese Bestätigungs-E-Mail aus. Wieder einmal haben wir keine Immundienste am Laufen, oder? Und das können wir auch für nein umgehen . Und dann sagen sie, ob und dann hier ist es, ein bestätigtes Konto benötigen. Sieht das bekannt aus? Denn denken Sie daran, wenn wir den Identitätskern konfigurieren, wir gesagt, dass Sie es nicht tun, wir müssen ihn nicht benötigen. Hier. Wir sehen, ob die Optionen sagten, dass es erforderlich sein sollte. Dann lesen wir die Registrierungsbestätigungsseite ein, die genau wie eine Shell-Seite ist, um so zu tun, als würden Sie hier auf denselben Link klicken. Ansonsten melden Sie sie einfach an. Das ist also, was Async signiert, ist vier. Dann bekommen wir alle Fehler. Wenn der Benutzer nicht erstellt wurde, erhalten wir die Fehler und senden sie dann zurück im Modellstatus an die Seite. Das hat mehrere. Ich wollte nur, dass du verstehst, was dieser Code macht, weil er überwältigend aussehen kann, aber wir müssen darauf achten. Sie werden sehen, dass alle Variablen, der gesamte Code, so geschrieben sind, dass Sie, wenn Sie ihn nur lesen, tatsächlich dem folgen können was an jedem Punkt passiert. Lassen Sie uns testen oder eine Verteilungsseite. Was mache ich auf unserer Seite mit geteiltem Layout. Oh, mir ist aufgefallen, dass wir diesen Login auch teilweise bekommen haben. Vermisse diesen Punkt. Dieser Login-Teil wurde mit der Gerüstaktivität geliefert und dieser Login PowerShell verfügt über das Link-Tool. Siehe hier ist es registrieren oder einloggen. Login partiell gibt uns eigentlich nur die Links, die wir für den Login oder die Registrierung benötigen. Und wenn wir angemeldet waren, heißt es Hallo, angemeldeter Benutzer. Und bitte loggen Sie sich aus. Was ich im Layout mache, wird so teilweise in der Navigationsleiste verwendet. Gehe in dieses Div , das bereits die Navbar hat. Und alles, was wir tun müssen, ist das teilweise Eindringen zu erfreuen, partieller Name entspricht dem Login teilweise. In Ordnung, darunter wirst du abschneiden. Lassen Sie uns dies für eine Spin-Steuerung angeben. Wenn das erste, was vereinbart wird, bin ich eine Ära der Boote, keine Servicetypen, die als Injektionsfehler sind. Und es ist löslich, wenn der Sign-Manager für Anwendungsbenutzer weiß, dass der Anmeldemanager im Teil für die Anmeldung verwendet wird. Es heißt, dass dies nicht registriert wurde. weiß, dass ich zum Start zurückgehe, was ich getan habe, ist, die Bibliothek oder die Funktion, die ich hier verwende, zu ändern die Bibliothek oder die Funktion, die ich hier verwende, Ich verwende AAD Identity Core. Aber wenn ich nur Identität oder CDF eintippe, würde ich Identität versus AD Identity Core Iodid in TTX zwei Typparameter, und es richtet es als Standardidentität ein, während Identitäts-Kernsätze von bestimmten Dinge. Aber ich glaube, was passiert, ist, dass Sie mit Identity Core Ihre Liste der On-Demand-Identität registrieren müssen , indem Sie einfach alles registrieren. Während ich mit der Identität, wo ich sagen muss, nun, der Identitätskern der USU und ich auch diesen Service und diesen Dienst will , anstatt in der Konfiguration kompliziert zu sein, werde ich einfach Häkchen des Identitätskerns und die Verwendung AD Identity nahm auch die Zeile heraus, in der die Regeln hinzugefügt wurden da die Iodid-Entität einen Benutzer und unseren Rollentyp in den Typklammern haben möchte . So wird es also aussehen. Diese Zeile ist keine Dienste , die Entity t user hinzugefügt haben. Wenn Sie sich also die überlasteten ansehen, etwas vom Typ T Benutzer und etwas vom Typ T Regel. Für den Benutzer wäre der Identitätsbenutzer, unser Anwendungsbenutzer in diesem Fall. Und Identitätszeile für die t-Regel des Typs. Wenn all das erledigt ist, lass mich F5 kontrollieren und es erneut versuchen. Keine oder Verpflichtung wird geladen. Und es wird nicht nur geladen, wir wissen, wie das Tool in der Navbar verknüpft ist. Wenn ich also auf „Registrieren“ klicke, erzähle ich mir nichts über den Absender der Eye-E-Mail. Denken Sie also daran, dass ich gesagt habe, dass wir das tun, ist ein Dienst, den wir noch nicht haben. Das ist kein Problem. Was ich tun werde, ist nicht injiziert, also werde ich es hier einfach von der Injektion entfernen und in die Tasche kommen und ich lasse es überall dort, wo es benutzt wird, nirgends. Ich komme mit denen rein. Überall dort, wo die E-Mail-Absenderobjekte verwendet wurden, einfach einen Kommentar, der zur späteren Verwendung mitgeteilt wurde. Das sollte also dieses Problem lösen. Lass mich wieder F5 kontrollieren. Und dieses Mal, wenn ich mich registriere, funktioniert es. Okay, also siehst du hier , wie das Formular aussieht. Wir erhalten ein E-Mail-Passwort, bestätigen das Passwort und dann etwas über Verwendung eines anderen Dienstes oder Registrieren. Denken Sie daran, dass wir diese Datei haben, damit wir dieses Registrierungsformular nach Belieben ändern können. Zum Beispiel möchte ich mehr Felder in ihrer Verteilung. Ich möchte nicht nur die E-Mail-Adresse und das Passwort. Wir wissen, was es ist , dass wir einen Benutzernamen und wir haben eine E-Mail gesendet. Das sind zwei verschiedene Bereiche. Die Art und Weise, wie das Formular, das er jetzt einrichtet, wird jedoch nur nach einer E-Mail gefragt, aber es wird diese sowohl in EMEA- als auch in den Feldern für Benutzernamen verwendet. Es liegt an dir, ob du sie trennen willst und wenn nicht, kannst du es so lassen, wie es ist. Ich brauche jedoch den Vornamen und den Nachnamen, um diesem Formular hinzuzufügen. Also bin ich zurück zu meinem Anmeldeformular gegangen und füge weitere Textfelder hinzu. Vor der E-Mail gebe ich den Vornamen des Eingabepunkts ein. Ich habe also nur den ganzen Block für E-Mail kopiert und ich werde bereits nach modifizierenden Formularen nachschlagen. Das sollte also zu diesem Zeitpunkt rudimentäres Zeug für dich sein. Ich sehe nur Gen, zusätzliche, die ich für FirstName und LastName mit mehreren Zellen erstellt habe , die diese roten Linien bekommen weil FirstName und LastName im Eingabeobjekt nicht existieren. Was ist dieses Eingabeobjekt? Eingabemodell, wenn ich steuere, klicke und zu seinem Eingabemodell springe Was ist ein Eingabemodell, wenn ich steuere, klicke und zu seinem Eingabemodell springe ? Das Eingabemodell hat diese Felder definiert? Ich kann es nicht sehen. Ich möchte, dass mein Vorname, mein Nachname vom Eingabemodell getrennt ist. Vorname, LastName. einmal nichts Besonderes. Ich entferne oder ändere die Anzeigenamen. Natürlich ist der Datentyp, den ich validiere, keine E-Mail-Adresse für diese beiden. Da sind wir los. Jetzt wurde unser Eingabemodell erweitert. Vorname, LastName und was auch immer LLC tad. Wir haben es auch dem Formular hinzugefügt und Sie werden sehen, dass diese roten Linien verschwunden sind. Nein. Jeder kennt also seine Rolle. Und dann das Letzte, was ich tun werde, ist die Verpflichtung zu verlängern Benutzer, aber das werde ich nicht tun. Ich wollte wenigstens jemanden registrieren , ohne dass die Daten eingehen. Und dann wirst du sehen, wie es aussieht , wenn wir die Warenkorbdaten erhalten. Hab ich. Lassen Sie mich also noch einmal die Aktualisierung kontrollieren. Springe zu meinem Register und du siehst die Formel, die mehr Themen zeigt. Also wenn ich all diese einlege und ich sage car Booking.com, Booking.com Passwort. Das Passwort, aber der Fehler ist streng. Jemand, der Capital P sagt, sagt es total schon eins. Das ist das Schlagwort, das es für deine Augen gibt. Und ich habe dieses Bestätigungspasswort benutzt. Wenn ich es ändere, schau dir das an, das Passwort und die Bestätigung stimmen nicht überein. Also bekommen wir automatisch diese Art von Feedback. Wenn ich etwas Ungültiges als E-Mail-Adresse eingebe und versuche mich zu registrieren oder etwas ungültige E-Mail-Adressen zu machen. Entschuldige dich. Aber hier sehen Sie, dass wir keinen Benutzer haben. Bestimmte Dinge scheitern, weil sie bestimmte Konfigurationen erwarten , die einfach nicht da sind. Alles klar, das ist kein Problem. Wie gesagt, während Sie die Fehler sehen, haben wir sie behoben. Dieser Fehler liegt also daran, dass der Tolkien-Generator, der vom Benutzermanager verwendet wird Start aus konfiguriert werden musste. Wir sind nicht bereit dafür. Ich liebe das, weil wir die E-Mail sowieso nicht senden. Ich ging zum Kommentar, das ist auch Alt. Ich bin mir sicher, dass es nur hier ist, weil der Benutzer erfolgreich erstellt wurde. Wenn ich also in der Datenbank in ASP NET-Benutzern nachschaue, werden Sie sehen, dass der Benutzer Admin bei Card Booking.com erstellt wurde . Das war keine ungültige E-Mail-Adresse. Es hat also funktioniert, egal was Sie hier sehen, schauen Sie sich das Passwort an. Das sieht nichts aus , was das Passwort, das ich dir auf dem Bildschirm gezeigt habe. Wisse nur, dass das automatisches Hashing ist. Wir müssen uns um dieses Hashing keine Sorgen machen. Wenn Sie jedoch das Geburtsdatum bemerken, wurden Vorname und Nachname nicht ausgefüllt. Geburtsdatum, offensichtlich, weil wir dieses Feld nicht hinzugefügt haben, aber FirstName und LastName wurden nicht ausgefüllt obwohl wir Daten zur Verfügung gestellt haben. Lassen Sie uns also sehen, wie wir das korrigieren können. Erstens füge ich das Feld für das Geburtsdatum auf das Formular ein. Und er spielt wirklich keine Rolle, woher Sie anfangen zu modifizieren, solange Sie alle Änderungen bis zum Ende vornehmen, dann können Sie sich für das Geburtsdatum entscheiden. Ich würde einfach festlegen, dass der Typ gleich dem Datum ist, damit wir eine Datumsauswahl in diesem Feld erhalten können. Dann geben Sie das Modell ein. Sie werden Geburtsdatum des Typs datetime sein. Ich werde es nicht erforderlich machen. Ich denke, ich sollte es erforderlich machen. Ich werde es erforderlich machen, weil es einen Standardwert haben wird , wie wir es gesehen haben , den wir nicht wirklich wollen, oder? Es ist also alles erforderlich, damit Sie sich erfolgreich auf dieser Website registrieren können. Nachdem wir all das erledigt haben, möchte ich, dass die zusätzlichen Felder in der Datenbank gespeichert werden. Ich bin dorthin gegangen, wo es heißt: Wenn der moderne Zustand gültig ist, dann erstelle einen neuen Benutzer, der den Benutzernamen E-Mail und die E-Mail-Adresse der E-Mail-Adresse angibt. Ich kann dies erweitern und sehen, und lieber Vorname sollte aus dem Vornamen des Formularpunkts eingegeben werden. Dies ist etwas, das wir schon einmal gemacht haben. Wir bauen auf dem auf, was wir wollen. Der Nachname ist gleich dem Nachnamen des Eingabepunktes. Und das Geburtsdatum entspricht dem Geburtsdatum des eingegebenen Punktes. Da sind wir los. Nachdem ich all das gemacht habe, werde ich testen, aber ich sehe das hier einfach weil ich das Geburtsdatum als Datum erstellt habe. Ich entschuldige mich, das hätte in der Tat Zeit sein sollen. Beachten Sie also, dass wir zwei Änderungen an mir haben was Wölfe in die Datenbank ändern. Nachdem wir dieses Feld in der Datenbank gerüstet haben. Und das müssen wir uns bewusst sein. Aber ich denke, wir können diesen Vorgang immer noch durchstehen , weil die Datenbank sie sowieso in eine Zeichenfolge konvertieren sollte , wenn sie sie bekommt. Versuchen wir es also noch einmal. Lasst uns rüberspringen, um uns zu registrieren und Tyrone Cooper ändert das heute. Für die Bearbeitung Ihrer Ys sind Testgründe. Ich überlasse das und verwende mein Passwort, um eins zu sagen oder benutze einfach etwas. Geburt 123, kein Problem das war in meiner Zwischenablage. Also verwende ich das einfach wieder. Wir klicken auf Registrieren. Okay, Parser müssen mindestens einen haben. Sie sehen also, dass das die Passwortstärke bei der Arbeit ist. Deshalb habe ich gesagt, p bei signiere eine Systole oder D1, verwende das erneut auf Registrieren. Sie sagen, dass sie nicht übereinstimmen. Also lass mich das nochmal versuchen. Registriere dich. Da sind wir los. Also nein, es fragt mich sogar, ob ich sehen möchte, ob das Passwort nur sehen möchte, ob wir schneller vorankommen können. Aber Sie sehen, dass sich dort registrieren und einloggen immer noch nicht ändern , da wir noch unsere Anwendung entwickeln. Kein Problem. Aber zumindest sehen wir, dass eine Registrierung funktioniert hat. Das ist einer. Wir werden es fehlerfrei durchgehen. Und wenn ich noch einmal in die Tabelle der ASP NET-Benutzer schaue, werde ich sehen, dass zusätzliche Felder hinzugefügt wurden. Jetzt sehe ich mein Geburtsdatum, das erste Thema und den Nachnamen. Und alles fängt an, gut zusammenzukommen. 33. Setup: Alles klar Leute, also machen wir gute Fortschritte. Der nächste Schritt besteht darin, die Anmeldeseite einzurichten. Ich fange damit an, dass das beginnt oder weil es noch einige Konfigurationen gibt. Jetzt muss es reingehen. Für unsere Anmeldekram. Wir sprechen über das, was wir Authentifizierung nennen. Autorisierung bedeutet, dass Sie das tun können? Authentifizierung bedeutet, lass mich beweisen, dass du bist, wer du bist. Wenn wir uns anmelden , authentifizieren wir uns dann. Was wir jedoch tun können, nachdem wir uns angemeldet haben, ist, wir dazu berechtigt sind? Obwohl die Box, die wir haben, haben die Middleware , die bereits für Autorisierungen verwendet wird, im Vordergrund steht. Ich füge eine weitere Zeile hinzu heißt „Authentifizierung verwenden“. Dies wird diesen Anmeldemanager wirklich so arbeiten lassen , wie wir es wollen. Eine andere Sache, die wir tun möchten, ist in den Konfigurationsdiensten und sagten Services Dot Add Authentication. Damit wir wissen, dass dieser Dienst bei jedem Start einer Anwendung verwendet wird. uns also, wenn all das erledigt Lassen Sie uns also, wenn all das erledigt ist, unsere Anmeldeseite einrichten. Jetzt können Sie Ihre Registrierungsseite erneut konfigurieren, da dies das Formular auf einer Seite ist nur vier Leerzeichen beansprucht. Und dann haben wir dieses andere div zu den gemischten Seiten auf beiden zusätzlichen Anmeldeoptionen, bla, bla, bla. Das dauert sechs. Es würde 66 machen. Er könnte einen kleiner machen. Sie passen es nach Ihren Wünschen an. Inzwischen sollten Sie sich wohl genug fühlen, um ein Ganzes zu kennen, um das Formular zu erweitern, halten Sie die Tasten an mich anpassen und ähnliches. Also werde ich nicht zu viel Zeit damit verbringen. Was wir jedoch tun wollten, ist die Anmeldeseite hinzuzufügen. Ich kann erneut mit der rechten Maustaste auf Bereiche klicken, auf Hinzufügen klicken und ein neues abgefasseltes Element auswählen und auf Identität klicken. Und nachdem er alle benötigten Informationen gesammelt hat, wird wir uns diesen Dialog geben, der es uns ermöglicht, zu simulieren, wo es sich anmeldet. Da sind wir los. Also haben wir diese Anmeldeseite. Ich werde nur das Logo pH auch einloggen. Wir haben Logos. Und noch einmal haben Sie eine Reihe von Seiten, Sie haben Pfade geändert oder das Passwort vergessen. Er kann eine Reihe von Dingen implementieren und ein Großteil des Codes ist ziemlich belastbar. Ich konzentriere mich jedoch nur auf diejenigen, die absolut notwendig sind, um das zu überstehen , was wir durchstehen müssen. Einloggen und ausloggen. Auch hier ist unser DB-Kontext die Datenbankkontext-Klasse, und dann klicken wir auf Hinzufügen. Wenn diese Operation abgeschlossen ist, öffnet es das Gerüst wieder. Lesen Sie mich, aber dann sehen wir, dass wir die Login- und Abmeldeseiten haben . Schauen wir uns zuerst das Logo an. Warum habe ich einen Logo-pH-Wert genommen? Nun, all dies wird tun, ist zu sagen, wenn der Benutzer, der hier ist, authentifiziert ist, obwohl er auf Logos klickt, was passiert mit dem nukleineren Logo, wenn er das tut? Dasselbe im Manager log salt und kehrt dann zur URL zurück. Das macht die Logo-Seite. Die Anmeldeseite, Es ist ein einfaches Formular. Gib mir deine E-Mail, gib mir dein Passwort. Und willst du, dass ich mich an dich erinnere? Wenn nicht, naja, ob du es nicht bist. Lass mich weitermachen und logge mich ein. Es generiert automatisch Links für Ich habe das Passwort vergessen. Wir haben es in dieser Datei nicht gesehen und werden es nicht unbedingt implementieren. Nein, das ist in Ordnung. Aber Sie haben Ihre Passwortregistrierung vergessen, da ein Benutzer kürzlich eine E-Mail-Bestätigung ist. Also all diese Dinge sowie dieser nächste Abschnitt auf der rechten Seite, wie wäre es mit alternativen Anmeldeoptionen? All diese Dinge kamen in dieser Form. Der Login-Code dahinter ist dem Register sehr ähnlich. Jeder der erlaubt anonymen, niedrigen Personen, die nicht authentifiziert sind, die Rede zu erreichen. Dann haben wir Injektionen für unseren User Manager und melden uns im Manager an. Wir haben das gleiche Format wie das Eingabemodell. Und das Eingabemodell wird hier verwendet, um einfach die E-Mail und das Passwort zu behalten und zeichnet sich daran erinnern, Bei get laden wir einfach die Seite so ziemlich, so dass es gleichzeitig externe Logins ist. müssen wir in diesem Rahmen dieses Kurses nicht unbedingt achten . Wenn Sie jedoch auf Login klicken, schauen wir uns an, was passiert, wenn alles gültig ist. Wir bitten den Anmeldemanager, sich mit dem Passwort anzumelden , das die E-Mail-Adresse und das angegebene Passwort angegeben hat. Wenn die Person sagte Erinnern Sie sich an mich. Und wenn wir lokal aktiviert haben, bedeutet lokal, dass, wenn sie nach ein paar fehlgeschlagenen Versuchen Ihre Grafschaft sperren sollten, bin ich mir sicher, dass Sie darauf gestoßen sind. All das ist in dieser sehr leistungsstarken Bibliothek eingebaut . Dieser Kurs reicht nicht aus, um alle Funktionen dieser Bibliothek zu durchlaufen. Deshalb konzentriere ich mich momentan auf die großen, größeren und wichtigeren Dinge, oder? Nachdem wir versucht hatten zu sagen, ob es eine erfolgreiche Anmeldung war , lesen wir Erich, die Rückgabe-URL. Andernfalls prüfen wir, ob dies der Fall ist, ob es eine Zwei-Faktor-Authentifizierung erfordert und wir führen diese Interaktion aus. Das haben wir nicht implementiert. Wenn der Benutzer gesperrte Transportkisten ist, lesen wir sie, dass wir das nicht implementiert haben. Und wenn alles andere fehlschlägt, kehren wir mit dem Modellfehler sehen den Zeichenfolgenpunkt leer als Schlüssel. Es war ein ungültiger Anmeldeversuch und wir kehren zum pH zurück. Wenn es so weit kommt, bedeutet das, dass es nicht funktioniert hat. Nett und einfach. Lassen Sie uns also weitermachen und testen oder anmelden. Jetzt haben wir bereits ein paar Verwendungszwecke erstellt. Ich bin mir sicher, dass du und verrückt bist, eine Reihe von Benutzern zu registrieren seit er das Register zur Arbeit gebracht hat und du siehst, ich hatte ein Zeichen, wusste es nicht nur , ich habe mich gerade ausgeloggt. Also lasst uns das versuchen, kein Login. Wir kommen zur Anmeldeseite. Großartig. Ich habe gesagt, dass er Admin bei car Booking.com war. Lassen Sie mich denken, es sollte am Ende eine Vier haben, aber lassen Sie mich versuchen, mich anzumelden. Und Sie werden sehen , dass es ungültige Anmeldung gibt, versuchen Sie es, die Datenbank zu überprüfen. Diese Kombination aus Benutzernamen oder E-Mail und Passwort wurde überhaupt nicht gefunden . Lassen Sie mich das einbringen, was ich für negative E-Mails halte, obwohl unsere Zwecke einfach besser sind, um die Freigabe wieder aufzuheben. Aber lass mich das noch einmal versuchen. Klicken Sie auf Login. Nein, ich treffe mich mit etwas anderem. Ich bekomme, dass diese Fehlerboard-Daten null sind. In Ordnung, also bin ich in den Debug-Modus gegangen und habe diese Operation erneut ausgeführt. Und das ist der Fehler, den ich bekomme, was ein bisschen sinnvoller ist. Und ich denke, es beschwert sich darüber weil wir Geburtsdatum und Datumszeit ändern, aber die Datenbanktools denken, dass sie schrumpfen. Das ist also eine einfache Lösung. Fügen Sie einfach eine Migration hinzu, ändern Sie den DOB auf Datumstyp. Lass es die Migration machen. Migration ist die Zehn-Rauschen - und Änderungsspalte für dieses Feld, das dabei ist, aktualisieren Sie also die Datenbank. Es sieht, dass es fehlgeschlagen ist, weil ich keine Nullen erlaube. Denken Sie also an das ganze Gespräch über Datentypen und Notizen. Das ist in Ordnung. Ich werde nicht zu sehr unter Druck setzen was ich tun werde, da wir uns noch in der Versuchsphase befinden. Und Sie können mit allen Benutzern tun, die Sie erstellt haben. Finde einfach alle von ihnen. Löschen. Okay, an dieser Stelle ist das wichtig, deshalb sind sie da und testen daher. Also entferne ich alle derzeit erstellten Benutzer und dann werde ich einfach erneut ausführen. Manchmal hat man also nicht den Luxus, das zu tun. Aber wir haben uns bereits angeschaut, wie Sie Schritte unternehmen können, wenn Sie nicht alle Datensätze entfernen können, die Sie bereits haben , als Sie eine solche Änderung vornehmen wollten. Wie auch immer, das Update war diesmal erfolgreich. Also lass mich einfach F5 kontrollieren und es nochmal versuchen. Ich bin zuerst nach der Registrierung gegangen und ich mache es diesmal richtig. Also Geburtsdatum. Mache heute einfach Admin, Auto Booking.com. Das ist das Schlagwort, nachdem dieses Passwort nur für Ihre Augen bestätigt wurde, das ist das Passwort. Und dann klicken wir auf Registrieren. Wissen, ich speichere das Passwort und schaue mir diesen Hallo Admin an, nicht Carbocation. Wisse, dass wir die Anzeige eingeschlossen haben. Alle verwenden die Authentifizierung und den Dienst für die AT-Autorisierung beim Start, wir sehen tatsächlich die Änderungen an der Benutzeroberfläche. Also lass mich ausloggen und ich melde mich jetzt ein. Ich benutze denselben Admin, eine Autobuchung, dasselbe Passwort, klicke auf Login und schaue mir das an. Wir sind eingeloggt. Logo funktioniert auch. Siehst du, da haben wir dieses Problem gerade gelöst. Jetzt haben wir das Registrierungsproblem in Zukunft behoben . Sie sollten keines dieser Programme haben. Auch hier wissen wir, wie wir uns nach Belieben einloggen und abmelden können. Das nächste wäre, wie verhindern wir , dass Benutzer, die nicht angemeldet sind , auf diese Seiten zugreifen? Denn zu diesem Zeitpunkt macht das Einloggen keinen Unterschied. Ich kann überall in der Anwendung hingehen. Ohne sich anzumelden. Wir müssen uns ansehen, wie wir es an unsere Lockdowns binden und auf bestimmte Teile der Anwendung für nicht authentifizierte Benutzer zugreifen können. 34. Setup: In dieser Lektion sprechen wir über das ganze Wochenende, um den Zugriff auf verschiedene Teile unserer Anwendung für authentische, authentifizierte Benutzer und autorisiert und umgekehrt einzuschränken um den Zugriff auf verschiedene Teile unserer Anwendung für authentische, authentifizierte . Jetzt klingt das schwieriger als es wirklich ist. Und ich zeige Ihnen, wie einfach es ist, dies zu erreichen. Nein, wir haben Anmelde- und Registrierungsfunktionen geöffnet, aber wir müssen in der Lage sein, diese Seiten zu verwalten. Jeder sollte also bequem auf die Homepage kommen können. Wenn sie jedoch auf Autos klicken, sollten sie gezwungen sein, sich anzumelden , bevor sie sich die Autos ansehen und leicht erledigen können . Und es ist ein sehr einfacher Weg. Lassen Sie mich einfach alle Registerkarten schließen, die zu diesem Zeitpunkt nicht wichtig sind und irgendetwas zusammenklappen. Wenn ich nicht will, dass du zur Liste der Autos kommst. Alles, was ich tun muss, ist über dem Seitencode für die Autos. Fügen Sie ein Attribut hinzu, das besagt, die fehlende using-Anweisung autorisieren. Das war's. Ich hab dir gesagt, es wäre einfach. Lassen Sie uns also einen Blick darauf werfen, wie das funktioniert. Dies ist also über der Indexseite für Autos, die ich autorisiert habe, was bedeutet, dass ich nicht in der Lage sein sollte , in einem nicht authentifizierten Zustand auf Autos zu klicken und die Liste der Karten zu sehen. Sieh dir an, was passiert, wenn ich auf Autos klicke , okay, okay, okay, das ist antiklimaktisch, aber du siehst, dass es sich nicht richtig verhält. Es versucht tatsächlich, zum Anmeldebildschirm zu gelangen. Jetzt gehe ich zurück zur Anwendung und vermute dringend , dass ich meine Konfiguration ändern muss . Schon wieder. Das ist wieder die, dieses Hin und Her. Es ist gut, denn wenn du diese Art von Pfeilen siehst, hilft es dir zu schließen wohin du gehen musst, um diese Probleme zu lösen. Wenn wir Dienste hinzufügten, denken Sie daran, dass wir zuerst einen Identitätskern hinzufügen, und dann haben wir gesehen, dass bestimmte Dinge nicht aus der Box kamen, weshalb wir ihn in Identität ändern. Mit diesen Dingen hat es nicht gut funktioniert. Aus dem Tellerrand fing an, nirgends zu arbeiten und etwas anderes zu sehen. Das Problem mit dem Pfeil, den wir gerade gesehen haben, ist, dass er an einem bestimmten Ort nach der Anmeldeseite sucht an einem bestimmten Ort nach der Anmeldeseite , an dem sie nicht existiert. liegt daran, dass Identitäten nur sagen werden, dass sie an diesem Ort schauen. Ich möchte jedoch, dass es in der Standardposition basierend auf dem Gerüst aussieht . Ich möchte also nicht viele Konfigurationen vornehmen und den normalen Ablauf der Anwendung ändern . Aus diesem Grund kann ich, anstatt den Identitäts - oder Identitätskern zu verwenden, Standardidentität verwenden. Wenn Sie sich diese ansehen, wird der Anwendung ein Gefühl gemeinsamer Identitätsdienste hinzugefügt , einschließlich unserer Standard-Benutzeroberfläche , in der wir unsere Sachen gerüstert hätten. Das ist der Standardspeicherort. Token-Anbieter. Denken Sie daran, vollständig, wenn wir unser Boot registrieren, den gesamten Token-Anbieter und es geht um Teetasse oder Spielzeug, es fehlt und wir müssen es einbeziehen. Es ist automatisch in den Standardoptionen enthalten und konfiguriert die Authentifizierung für die Verwendung von Cookies. Das werde ich tun. Fügen Sie Standardidentität Nein, ich erhalte diesen Fehler, weil ich die standardmäßige Entität ähnlich wie Identity Core Words nur t Benutzer benötigt, was bedeutet, dass ich manuell hierher kommen und Regeln hinzufügen muss . Schon wieder. Fügen Sie Regeln hinzu, und dann geben wir ihr die Identitätsregel. Lass es mich in Klammern stecken. Dort gehen wir weiter, Entitätsregel, schließen. Nein, wir verwenden die Standardbibliothek für die Identität. Und dieser wird, wie gesagt, bestimmte Standardwerte enthalten, Alt off the box, dass andere Dinge nicht unbedingt getan haben. Lassen Sie uns einen weiteren Schlag auf dieses Experiment machen, war, dass wir die Auto-Rede autorisiert haben. Ich sollte nicht in der Lage sein, dorthin zu navigieren , ohne vorher angemeldet zu sein. Wenn ich also auf Autos klicke, schau dir das an, es leitet mich einfach automatisch zur Anmeldeseite um. Da wir also nicht den Standardwert hatten, suchte es nicht im Standardspeicherort des Identitätsordners, um die Symbole zu finden und sich anzumelden. Das hat also diesen Teil tatsächlich weggelassen, weshalb wir diese Seite bekommen haben. Ich zeige dir nie etwas oder Kodierungen einen Fehler, ohne zu erklären, warum wir es bekommen haben und wie wir es beheben. Jetzt, da wir uns auf der Anmeldeseite befinden, stellen wir sicher, dass unsere Login-Funktionalität immer noch funktioniert. Ja, das tut es. Hier ist unser Hallo und nein, wir können die Seite nicht sehen, also nirgends authentifiziert und wir sind berechtigt , die Seite zu sehen. Es wäre jedoch ziemlich mühsam zu sagen: Okay, nun, nach dem Lockdown zum Bearbeiten und den Details und dem Löschen, denn an diesem Punkt, wenn ich ein Auto bearbeiten wollte und ich mich an die URL zum Bearbeiten unserer auto. Mal sehen, ich bin nicht autorisiert und gehe zu Autos und bin nicht autorisiert. Was war ich während es war über der Schulter von jemandem gestanden . bearbeite unser Auto und ich erinnere mich an die URL. Ich kann diese URL tatsächlich einfach eingeben und die gesamte Autorisierung umgehen , um das Auto zu bearbeiten, was falsch ist. An diesem Punkt müsste ich das Autorisierungsattribut auf jeder einzelnen Seite hinzufügen Autorisierungsattribut auf jeder einzelnen Seite die ich sie einrichten möchte Um zu erstellen, müsste ich zwei weitere Details machen. Bearbeiten Sie, dass jeder einzelne von ihnen, was nicht unbedingt ist, ich meine, es funktioniert und es kann in einer kleinen Anwendung praktisch sein . Aber für mich wird es einfach ermüdend werden. Und es ist leicht für jemanden zu vergessen , diesen Code über dem pH-Code zu platzieren. Was wir tun können, ist es auf globaler Ebene zu tun. in unserem Startup-Wochenende Fügen Sie in unserem Startup-Wochenende diesen Code hinzu oder fügen Sie einen Bereich für Razor Seiten hinzu. Möglicherweise sehen Sie einen unterschiedlichen Code zwischen der Art und Weise, wie es auf Razor-Seiten funktioniert , und wenn Sie es jemals in MVC tun mussten , und wie Sie in einer ganzen Reihe sehen, gibt es so viele Möglichkeiten, dasselbe zu erreichen . Finde einfach diejenige, die für dich funktioniert und am besten für deinen Kontext geeignet ist. In dieser Situation müssen Sie nur sehen, dass Arterien Seiten sind. Fangen Sie an, dieselbe Option anzuwenden. Zu akzeptierendes Objekt. Ich nenne es nur O statt Optionen. Also alle Lambda-Ausdruck. Und stattdessen sage ich alle Punktkonventionen, Dot-autorisierter Ordner, Slush. Es gibt eine Reihe von Dingen, die Sie autorisieren können. Autorisieren Sie den Bereich, in dem Sie einen ganzen Tag autorisieren können, und können Sie eine bestimmte Seite autorisieren. Wenn Sie vielleicht eine bestimmte Seite haben, auf der bestimmte Regeln festgelegt werden sollen , die sich von den anderen pH-Werten oder einem bestimmten Ordner unterscheidet, der von verschiedenen abgespielt werden soll, kann er all diese hinzufügen. Sie werden Konventionen genannt. Norm fügt nach einem Schrägstrich nur eine globale Konvention hinzu und sieht, dass Sie autorisiert sein sollen. Dies wird also automatisch zur Laufzeit im Grunde genommen diesen autorisierten Filter über jede einzelne Seite in meiner Anwendung hinzufügen . Die einzige Möglichkeit, es zu umgehen, besteht darin anonym hinzuzufügen oder zuzulassen. Also zeige ich dir das jetzt sofort. Wenn ich das autorisierte von der Fahrzeugseite und einem Control F5 entferne , lass es laufen. Du wirst sehen, dass ich auf der Homepage hätte landen sollen. muss mich anmelden, wenn ich versuche zu mischen, es möchte, dass ich es unterschreibe, egal wohin ich gehe, ich muss mich anmelden. Aber wenn ich mich dann registriere, kann ich die Seite zur Umverteilung sehen. Das liegt daran, dass der Filter, der als niedrig anonym bezeichnet wird, über der Predigt des Registers steht, oder? Wenn ich also reinspringe und mir schon Store anschaue, siehst du darüber ein niedriges Anonym. Wenn ich das also zur regulären Indexseite hinzufüge . Denken Sie daran, dass wir mit unserer Indexseite angefangen haben , auf der wir all unser wunderbares Zitat aus einer einfacheren Web-Div-Klasse hatten . Wenn ich den Benutzer nach London wollte, zumindest die Homepage ohne Butter. Aber überall sonst müssen sie sich anmelden, dann muss ich nur anonym zulassen sagen. also aktualisiere Wenn ich also aktualisiere und zur Homepage gehe , wird die Homepage gerendert, nur weil ich Hallo Anonym gesagt habe. Wenn ich jedoch versucht habe, zu Autos zu fahren, kann ich nicht dorthin gelangen. Wenn ich versucht habe, eine direkte URL zum Schrägstrich einzugeben , bearbeiten Sie mit der ID 14. Ich muss mich einloggen, egal was ich mache, ich kann auch nirgendwohin gehen, oder? Keine Privatsphäre. Es möchte, dass ich mich einlogge , um das zu korrigieren. Ich muss nur über den Datenschutz hinausgehen und anonymen Zugriff zulassen. Plötzlich lässt ihn auf Datenschutz klicken. Es wird mich tatsächlich auf die Datenschutzseite bringen , da anonyme Personen sie sehen können. Wenn ich mich einlogge und es dann noch einmal versuche, dann okay , Homepages, gute Autos und alles andere steht zur Verfügung. So können wir im Grunde genommen sperren oder anwenden und unerwünschten Zugriff auf sensible Bereiche einschränken . 35. Berechtigung hinzufügen: Alles klar Leute, also denke ich, dass wir unsere Anwendung bis zu diesem Zeitpunkt gut gesichert haben , wir haben die Registrierung und den Login erfolgreich eingerichtet , und es gibt so viel mehr, was wir tun können. Wir könnten in Rollen einsteigen, wir könnten die Benutzer auf der Grundlage bestimmter Richtlinien und Ansprüche einschränken . Es gibt so viel, so viele Dinge, die wir tun könnten. Aber leider möchte ich Sie nicht mit all den Informationen und allen Szenarien und so weiter überwältigen . Es ist besser, so viel NEIN zu absorbieren und damit zu experimentieren. Und dann können Sie Ihr Wissen nach Bedarf erweitern. Im Moment können wir einfach eine kurze Überprüfung dessen machen , was wir implementiert haben. Beginnend mit unserem Identitätsbenutzer, der Benutzerklasse der Anwendung. Als wir unsere Identitätsbibliothek eingerichtet haben. In diesem Projekt mussten wir kitschige Vererbung für den DB-Kontext des Identity DB-Kontextes erben. Und dann legen wir fest , dass es basierend auf dem Kontext des Anwendungsbenutzers erbt . Anwendungsbenutzer war unsere benutzerdefinierte Klasse , die wir treffen, um von Identitätsbenutzern zu erben, wo wir zusätzliche Felder eingefügt haben, die die Benutzertabelle in der Datenbank erweitern würden. Bisher haben wir keinen benutzerdefinierten Code geschrieben um das Erstellen des Benutzers oder das Hashing des Passworts oder sogar Anmeldefunktionen zu handhaben . All diese Dinge wurden uns aus dem Tellerrand gegeben. Und die Breite, der Spielraum , den wir sie abseits des Kurses ändern könnten. Nachdem wir all das getan hatten, haben wir die Änderungen mit ein paar Migrationen gerüstet, haben wir die Änderungen mit ein paar Migrationen gerüstet, einige Feldmigrationen waren einige Änderungen, aber wir haben all das durchgemacht. Und dann haben wir dafür gesorgt, dass wir Identität in unserer Webanwendung konfiguriert haben, die wir auch Identitätszyklen im Vergleich zur AD-Standardidentität durchlaufen haben, die wir sagte, dass Louis, weil es mit den am meisten vorgepackten Bibliotheken geliefert wurde den am meisten vorgepackten Bibliotheken basierend auf dem, was wir tun müssen. Nachdem wir all das getan hatten, haben wir unsere Benutzeroberflächen erstellt und einige von ihnen modifiziert. Für die Anmeldung. Wir hatten die Kommentare, Gedanken, den ganzen Code, weil er nicht unbedingt auf unseren derzeitigen Umfang anwendbar war . Also entfernen wir etwas von diesem Code. Wir haben die Login- und Logout-Funktionen und Seiten eingefügt. Wir haben auch einen Login mit freundlicher Genehmigung von dem Gerüst erhalten, das wir unserer Layoutseite hinzugefügt haben, wodurch wir Zugriff auf die Register- und Login-Links erhalten. Jetzt, da all das erledigt ist, sind Zoom-Aufzählungszeichen gute Änderungen. Und sehen Sie, dass wir unserer Anwendung Login und Funktionalität hinzugefügt haben. Unsere Teamkollegen wissen genau, was sie erwarten können , wenn sie den neuesten Code erhalten. Also habe ich mich angemeldet und Funktionen hinzugefügt und dann verpflichten wir uns einfach alles und sinken. Das war's für diesen Abschnitt.