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.