Transcription
1. Introduction: Bonjour et bienvenue dans
ce cours, développement web
de base
avec ASP.Net Core F5. Je suis votre instructeur pour
VOR Williams et je suis ingénieur logiciel et
conférencier dans ce cours Nous allons en apprendre
davantage sur ASP.Net Core, qui est un framework Web gratuit et open
source. Et c'est également le
successeur d'ASP.Net
, développé par Microsoft. Dans ce cours, nous allons
également
envisager de connecter notre application
ASP.Net Core à une base de données Microsoft SQL Server. Pour ce faire, nous
allons
examiner Entity Framework, une bibliothèque
spécialement
conçue pour ce
type d'interaction. Nous allons également
examiner le contrôle des sources, qui est une pratique de camionnage
et de gestion des changements, conformément l'école source
utilisera GitHub comme outil pour faciliter
cette pratique. Ce cours suppose
que vous possédez des connaissances fondamentales en
HTML, CSS et C-sharp. Si ce n'est pas le cas, je vous
encourage à
consulter mes autres cours
sur ces sujets. Avec tout cela dit et fait, commençons et j'ai
hâte de vous voir dans le cours.
2. Configurer un projet de base ASP.NET: Bienvenue les gars de retour. Dans cette leçon, nous
allons simplement mettre en place notre environnement de développement pour notre application ASP.Net Core. Et ce que j'aimerais que
vous fassiez, c'est de cliquer sur Démarrer et de taper Visual
Studio Installer. Visual
Studio est déjà installé. Ce que nous devons faire, c'est d'installer d'
autres charges de travail pour que
nous puissions nous lancer dans le développement. Ne le faites pas, une fois
que vous avez mis en place cet installateur, vous devriez voir une fenêtre
semblable à celle-ci. Et ce que vous pouvez faire,
c'est cliquer sur Modifier. Et lorsque vous cliquez sur Modifier, vous verrez une liste des charges de travail
potentielles
que vous pouvez installer. Vous avez donc déjà celui
pour le développement d'ordinateurs de bureau. Ce dont vous auriez besoin,
c'est celui d' ASP.Net et de développement Web. Donc, si vous ne l'
avez pas déjà coché, alors il peut aller de l'avant et le prendre puis aller de
l'avant et installer. Vous pouvez donc voir que j'ai
déjà le mien pour le
faire et que vous pouvez
installer d'autres charges de travail. Mais pour ce cours particulier
ou les prochaines leçons, nous voulions absolument
faire
cocher et installer ASP.Net et le développement
Web. Une fois
cette installation terminée,
vous pouvez maintenant lancer Visual Studio. À partir de là, nous allons
créer un nouveau projet. Vous pouvez donc aller de l'avant et
créer un nouveau projet. Et nous sommes à la recherche d'une application Web
ASP.Net Core. Vous pouvez donc simplement taper dans la
recherche ASP.Net Core Web App. Vous en verrez donc
quelques-uns. Et vous remarquerez que vous avez l'application Web qui
utilise les pages Razor. Vous disposez également de l'application Web principale qui utilise le contrôleur de
vue modal. Ensuite, vous avez une API Web et vous avez un tas
d'autres modèles. À mesure que vous acquérez plus d'expérience, vous pouvez expérimenter
les différents modèles. Mais pour cela, bien sûr, nous allons regarder application Web
ASP.Net Core à
l'aide de pages Razor. Nous pouvons aller de l'avant et atteindre cela. Allez-y et cliquez sur Suivant. Et nous allons appeler cette voiture de projet en démarrage. L'idée générale derrière les projets sera que
nous créons une application qui permet aux gens de réserver ou de louer une voiture auprès d'une entreprise
au besoin. Désolé, c'est beau et simple,
la capacité sera merveilleusement compliquée pour que nous puissions mettre les fondamentaux
sous nos ceintures. Nous pouvons donc simplement aller de
l'avant et frapper Next. Et nous allons
utiliser Dotnet F5. Ensuite, vous pouvez activer la compilation
Razor Runtime, ce qui nous aidera dans
notre débogage et nos tests. Nous n'allons pas arrêter l'
authentification pour le moment. Nous allons le faire manuellement plus tard afin de pouvoir voir tous
les composants qui s'
adaptent à ces
paramètres en place. Vous pouvez aller de l'avant et cliquer sur Créer. Maintenant que notre
projet est opérationnel, ce que nous allons
faire, c'est juste jeter un coup d'œil à ce que
nous sortons de la boîte. Nous obtenons cette structure de projet. Et lorsque vous cliquez sur Démarrer, vous remarquerez que nous avons
une application Web prête à l'emploi. Nous avons l'application Web, nous avons notre barre de navigation en haut,
la zone de contenu. C'est donc très similaire à ce que nous aurions
regardé lorsque nous examinons les bases du développement
HTML et HTML. À ce stade, nous n'avons pas
écrit de code, mais nous disposons d'une
page Web comportant au moins deux pages pour
notre plaisir de visionner. Nous allons explorer
les bases
de ce que nous
sortons de la boîte. Bien que tout cela soit
généré là où nous trouvons ce qui reste et
fait quand nous
arriverons, nous allons explorer la structure des dossiers
que nous avons obtenue avec cette application Web
et ce que tous les ces fichiers signifient et représentent.
3. Projet de Tour de pages Razor: Très bien, donc on est de retour. Nous allons discuter la dynamique ou du moins
d'une structure de dossiers et des différents fichiers
que nous obtenons dans notre application ASP.Net Core. Vous avez déjà examiné le HTML
et le CSS, JavaScript
et comment
tous ces facteurs se combinent pour vous donner un
site Web et le net de fonds. Vous placez un nouveau projet
dans un dossier 12, vous avez tendance à placer
les
différents types de ressources, les images dans leur
propre dossier ,
les fichiers
CSS dans leur propre
dossier, etc. Vous auriez également vu que lors des exercices de codage C Sharp où chaque fois que vous
créez un projet,
vous disposez d'un tout
nouveau dossier dans lequel
tous les fichiers du
projet auraient été trouvés vous disposez d'un tout
nouveau dossier dans lequel . C'est le même principe ou solution dans un
dossier en soi, le projet suffit
tout seul. Et puis il y a
différents fichiers et dossiers au lieu de
cet autre dossier. Commençons par
regarder les propriétés. Les propriétés nous donnent
ces dépendances de fichiers l'on a à voir avec les
bibliothèques et les frameworks. Vous en verrez davantage
au fur et à mesure. Je ne vais pas m'ennuyer, vous savez, ou m'
accabler par ça. Mais si vous regardez les propriétés, vous verrez que vous
avez un fichier
JSON des paramètres de lancement, donc vous n'avez généralement pas
à modifier ce fichier à ce sujet, vous faites quelque chose de
très explicite, ce que nous ne faisons pas en ce
moment et nous ne le ferons probablement pas dans
le cadre de ce cours. Mais c'est bon d'apprécier
ce qu'il y a ici. Vous verrez que URL de
l'application
Canada est définie ici, où elle indique que vous
avez l'URL à une adresse HTTP, puis
que vous avez le port SSL, ce qui signifie que lorsque nous cliquons sur Démarrer, nous sommes pour
pouvoir accéder à l'application en
tapant cette URL ou en entrant l'hôte
local à deux points
HTTPS avec le
numéro de port des ports SSL, vous n'avez
généralement pas besoin de modifier cela. Il est donc juste bon de le
comprendre encore une fois. dossier principal suivant est
notre dossier racine www. Il ne
ressemble donc pas vraiment à un dossier basé sur la mise en attente. Les autres dossiers se
trouvaient dans cette structure de
projet, mais ce que vous réaliseriez, c'est qu'il y a des sous-dossiers. Il s'agit donc d'un dossier qui stocke les
fichiers statiques du site Web. Ainsi, quand on parle de
fichiers statiques, comme vous pouvez le voir, c'est
le dossier CSS, le dossier JS et un
autre appelé leap. Tous ces actifs et les fichiers
CSS, les fichiers JavaScript ou les
bibliothèques tierces qui peuvent être une combinaison de fichiers CSS et
JavaScript ou jQuery. Vous voudriez
les stocker tous à l'intérieur de la racine www car
l'
application elle-même mappe cet emplacement
et facilite l'
accès à cet emplacement lorsque
vous souhaitez accéder au CSS, le JavaScript ou n'importe quel autre fichier de
ressources. Vous pouvez donc voir qu'il est
déjà intégré avec bootstrap, jQuery, validation jQuery et une autre bibliothèque
pour la validation jQuery. Donc toutes ces
bibliothèques sortent de la boîte. Si nous voulons ajouter
d'autres bibliothèques, ce que nous ferons plus tard, nous pouvons toujours cliquer avec le bouton droit de la souris
et passer à Ajouter. Ensuite, il y a une fonctionnalité
permettant d' installer simplement la bibliothèque
côté client. Lorsque nous en arrivons à ce point,
nous pouvons simplement utiliser cela et rechercher notre bibliothèque. Et cela
nous montrerait tous les résultats, comment nous pouvons simplement l'installer dans l'application sans interrogation
manuelle ni pêche. Alors rappelez-vous quand nous faisions notre inclusion jQuery et ainsi de suite pour
aller sur le site Web, obtenir le fichier et copier
localement, ou utiliser un CDN. Lors de l'utilisation de ce gestionnaire de
bibliothèque. Nous pouvons faire tout cela ici
en quelques clics. Et en fait, il
suffit de le télécharger sur notre système ou dans nos dossiers de
projets pour nous. Très bien, c'est donc là que tous nos fichiers statiques
sont réellement conservés. Sachez que si vous avez déjà vu
une application MVC, vous aurez l'habitude de
voir les
dossiers de modèles, de
vues et de contrôleurs prêts à l'emploi. Sinon, c'est très bien. Mais la différence entre le modèle MVC ou le modèle de
contrôleur de vue de modèle et le modèle de pages Razor
est un problème que
la façon dont les pages et leurs ressources
sont structurées est différente. Avec le MVC, vous avez le modèle qui est un
fichier de classe trop élevé. Vous avez la vue,
qui est le fichier HTML. Et puis, vous avez un contrôleur qui était l'intelligence. Dans les pages Razor. Ce qu'ils ont fait, c'est qu'ils
donnent un dossier appelé pages, puis chaque page est livrée avec le fichier HTML CSS ou HTML, ainsi qu'un fichier de code R, qui sert à la fois d'
intelligence et de modèle. Jetons un coup d'œil à la page d'
index. La page d'index. N'oubliez pas que dans HTML Basics, nommez
toujours votre index de
première page. Eh bien, Microsoft est à la
hauteur de ce principe très
simple. Donc, lorsque je clique sur
la page d'index, le fichier HTML CSS, vous verrez que ce n'
est vraiment qu'un fichier HTML. Oui, il y a quelques embellissements, mais une fois que vous aurez surmonté cela, dont nous parlerons plus tard, vous remarquerez qu'il s'agit
des mêmes balises que celles que nous aurions
appris des bases HTML. La balise div, la balise image, la balise P et toutes les autres
cibles que vous connaissez sont toutes utilisables
à l'intérieur de ce fichier, le fichier CSS point, le fichier HTML dot CSS. On dirait le code C-Sharp que nous
venons de regarder. Très bien, nous avons donc
la classe publique appelée deux-points du modèle d'index. C'est ce qu'on appelle l'héritage. Le modèle d'index hérite
du modèle de page, qui est une classe
de base intégrée. Mais le fait est que c'est ce qu'on
appelle le modèle d'index. Et si vous regardez en
arrière la classe d'index, vous remarquerez qu'en haut, il y a un, je suis une page, puis deux, ça indique le modèle. Vous remarquez une déclaration indiquant que
mon modèle est un modèle d'index. Cela signifie que tout ce qui
est défini à la place du modèle d' index peut être accédé à partir de la page Web au
fur et à mesure que nous en construisons. Vous l'
apprécierez un peu plus. La plupart du temps, lorsque vous
voyez les IRA sont les pages le plus souvent, sinon toutes les fois,
vous les verrez par paires. Vous allez voir
que c'est du code HTML CSS. Je suis celui qui
est en HTML CSS. fonction de votre Visual Studio, vous pouvez les avoir
en fait imbriqués par défaut, mais vous pouvez en fait
basculer cette imbrication. Sachez qu'il est désactivé pour moi, je peux l'activer. J'ai tendance à penser que c'est un peu plus net car
lorsqu'il est imbriqué, je peux simplement cliquer et ensuite je vois le fichier obtenu directement en
dessous de celui-ci. Parfois, c'est
déroutant quand ils
sont tous listés comme ça,
mais c'est à vous de décider. Je vous montre juste
que vous pouvez lister, vous pouvez imbriquer et
désactiver cela à volonté. Comme je l'ai dit, chaque fois que vous créez une page, ou du moins une page de
résultats standard, vous allez vous
retrouver avec
ces deux fichiers connaissant
le dossier partagé. C'est ici
que les fichiers qui seront utilisés ou accessibles par
tous les autres fichiers, toutes les autres pages, c'est là
que ceux-ci sont stockés. Jetons un coup d'œil à la mise en page. Non, vous auriez remarqué
qu'avec notre page d'index, permettez-moi de sauter rapidement le tampon
avec index. Vous auriez remarqué que la page d'
index ne possède
pas structure de squelette HTML dont nous avions parlé
à partir des bases. Rappelez-vous que nous commençons toujours par le ruban
adhésif, puis les
balises HTML , puis nous frappons
et le corps, puis nous mettons le contenu, cela va directement
au contenu. Ce qui se passe, c'est qu'ils
utilisent ce que nous appelons une mise en page. Ou à l'époque, nous l'appelons un modèle ou un chef-d'œuvre, où ils exposent le temporaire une fois
au lieu de
répéter, répéter, répéter ce
modèle chaque PDF, 20 pages, vous devez
répéter ce modèle ? Oui, sur un site Web de base, c'est absolument nécessaire. Mais ce qu'ils ont fait, c'était en quelque sorte
des résumés de ce travail occupé. Rappelez-vous encore une fois que les
frameworks sont configurés pour réduire la quantité de
répétitions ou réduire la probabilité que vous deviez
répéter certaines choses. Parce qu'ils savent que
vous avez à faire avec ce modèle HTML à
chaque fois. Lorsqu'ils ont développé un framework de base
..net, ils ont créé
à un moment donné, puis
ils vous ont permis restituer les
différents pH à l'intérieur de cette zone appelée corps de rendu. Ce qui se passe vraiment, c'est
que chaque page
aura toujours la
balise HTML, la balise de tête. Ce paramètre est défini globalement COC, il est toujours lié
aux feuilles de style pour que
vous n'ayez pas à le
faire sur chaque page. Vous avez l'
étiquette corporelle qui va avoir l'
oreille d'en-tête avec le nerf, donc vous n'avez pas besoin de créer
assez sur chaque page. Et ensuite, vous aurez
toujours ce cours de div avec conteneur. Rappelez-vous que nous avons regardé
cela, cette classe div est
égale à conteneur. Et puis oui, vous allez
voir de nouvelles balises. Vous pouvez les utiliser, vous
ne pouvez jamais les utiliser à ce stade. Vous n'êtes pas vraiment obligé de le faire. Je suis inquiet à
ce sujet, mais le fait
est que quelle que soit la raison pour laquelle PG crée avec un
rendu automatique à l'intérieur de cette zone,
se trouve à l'intérieur de ce modèle
global. Pour lire ici, vous
modifierez le local, les mises en page, désolé, de
toutes les pages globales. C'est un moyen plus facile de gérer votre site Web,
car maintenant vous n'avez plus à faire sur toutes les pages
comme nous l'aurions vu lorsque nous effectuons le HTML et le CSS de
base. Tout cela est en quelque
sorte exposé ici. Vous voyez les
inclusions de script au bas de la page et vous
pouvez tout modifier. Voyons donc, par exemple, que ce qui a été
généré automatiquement pour nous serait le
titre Afficher les données de la page. Si nous revenons à notre page d'index, nous verrons que le
type de données de vue est égal à la page d'accueil. C'est ce qui serait rendu au lieu du titre de
vos données. C'est donc comme une variable
et un espace réservé pour tout ce qui est mis
sur n'importe quel pH que nous avons. Encore une fois, le titre est ce qui s' affiche dans le
navigateur dans la baignoire. Je voulais changer
cela d'
un simple texte à une application de
réservation de voiture. Un peu plus lisible par l'homme. Mais c'est le titre
dans la barre de navigation, désolé, dans la baignoire
du navigateur,
alors la barre de navigation
a également le carb regardant vers le haut
écrit ici. Donc ce que je vais
faire, c'est contrôler et F5 et cette attelle pour
fonctionner sans débogage. Et quand cette application apparaît, la première chose que je veux que vous
preniez note, c'est le fait
qu'il s'agit de la page d'accueil. C'est donc le chargement de
la page d'index. Au cas où vous ne
croyez pas que c'est le cas. Index, c'est la page d'accueil, non ? Il charge donc la page d'accueil ou la page d'index de
l'application de
réservation de voiture de tableau de bord. Ce sont des textes statiques que
nous avons mis dans le titre. Très bien, que se passe-t-il si je voulais mettre à jour ce texte ici ? Je ne veux pas dire que les glucides s'y
accrochent non plus. Donc. Je peux aller trouver ce peu
de code qui se trouve ici. Et je vais le changer en application
de réservation de voiture. Je vais sauver un peu d'
humour. Économisez toujours. Malheureusement, je ne les ai pas
vus implémenter
AutoCAD dans Visual Studio. Ça aurait été très cool, mais je suppose qu'ils ne l'ont pas fait, ils ne l'ont pas
fait pour de bonnes raisons. Mais après avoir apporté ce changement, je vais juste à Contrôler,
rafraîchir mon navigateur. Et voici, nous voyons le changement qui se fait et ce changement
encore une fois, ces changements globaux. Donc, si je passe à la vie privée
pour Go on home, chacune de ces pages n'
hérite que de la mise en page
globale. Je vais donc simplement le mettre à
jour dans le pied de page. Je peux juste passer en revue, le changer dans le pied de page. Si quoi que ce soit, je
voulais tricher et cisailler. Je veux dire, c'est dire 2021
si je devais le mettre à jour 2022 ou ne pas afficher
uniquement la vie privée, en mettant tout ce que
j'ai besoin de mettre, tout cela est
mis à jour à l'échelle mondiale. Après avoir fait ce changement, je vais me
rafraîchir encore une fois. Et vous voyez que le changement
ne reflète pas. C'est à quel point il est facile de
réellement modifier globalement, n'est-ce pas ? Maintenant, si vous
vouliez modifier les pages, c'est juste un tas de HTML. Voici donc ce que je suis allé faire. Je vais lancer le code HTML
antique à partir de notre classe de base que nous
avions sur notre page d'index. Et je vais juste le
frapper sur
cette nouvelle page d'index et
voyons ce qui se passe. Voici donc notre code HTML
à partir des bases. Ce qui se passe encore une fois, c'est que nous n'avons pas besoin de toutes ces balises. Il aura besoin de ça, le
corps HTML tout ce que je veux vraiment. Je n'ai même pas besoin du conteneur. Je me souviens que nous avons dû
répéter Kantian ou nous
devons répéter le
roman partout. Ensuite, nous ajoutons une
div pour le contenu. Eh bien, ce qu'il y a dans le contenu,
c'est ce dont nous avons vraiment besoin, c'est ce
qui est
affiché sur la page. Nous n'avons pas besoin d'un pied de page non plus
parce que nous avons notre pied de page. Je vais juste prendre
tout ce contenu. Je ne suis pas vraiment préoccupé par le fonctionnement du bouton
ne fonctionne pas encore. Eh bien, ce que je vais
faire, c'est simplement remplacer le contenu
par défaut
fourni avec du contenu REL de notre cours. Je suis allé le sauver, puis
j'ai revu ça. Nulle part voyant que nous pouvons simplement modifier les
pages de la même manière. La seule chose, c'est que
nous n'avons pas à répéter notre squelette chaque
fois que cela est fait pour nous. Nous avons juste besoin du contenu. Et remarquez que tous les cours fonctionnent
toujours pour l'affichage des boutons et pour
les chiens et la police. Pourquoi ? Parce que le fichier CSS de Bootstrap est déjà
inclus dès l'emballage. Ils
nous donnent déjà ce fichier bootstrap. Maintenant, une chose, c'est que
nous avons eu cinq ans. Cela pourrait changer dans le futur, mais le bon nœud de la bibliothèque
bootstrap est, je peux forer jusqu'au bas
et voir la graisse physique. Quand je l'ai dit, ils vous
facilitent l'accès. Tout ce dont vous avez vraiment besoin,
c'est de cette barre oblique de tilde. Et puis il commencera à vous
donner tous
les dossiers de la hiérarchie des dossiers de
dub, dub, dub root. Si je voulais accéder au
fichier CSS de mon site CSS, ou si je voulais accéder au
dossier CSS et je dirai aujourd'hui, alors slash, puis ça commence lister tous
les dossiers pour moi. Je voulais accéder au fichier CSS. Très bien, c'est
pourquoi j'ai dit que tous vos fichiers
statiques auxquels vous devez accéder peuvent aller dans dub, dub, dub root, et cela rendra la tâche très facile. Mais je faisais
remarquer qu'on
peut aller jusqu'
au fichier bootstrap. Et la
version Bootstrap que nous
sortons de la boîte est 4.3.1. Dans les bases, nous avons
examiné l'utilisation de cinq, mais ensuite avec ce modèle,
nous n'avons fait que bootstrap, bootstrap forêts, désolé,
ce qui n'est pas une grosse affaire parce que les différences entre les deux ne sont pas si grandes d'un accord. Et la documentation
est toujours présente au cas où vous utilisiez quelque chose d' un qui n'est pas
disponible dans l'autre, comme si vous ne me voyiez pas
essayer d'utiliser Bootstrap pour classes qui ne sont pas
dans Bootstrap F5, vous pouvez toujours
vérifier cela. Très bien, maintenant que nous avons une meilleure compréhension du fonctionnement de la mise en page et
des fichiers en général. Et il y a d'autres fichiers là-bas, importations de vues
led et le démarrage de la vue. Si vous commencez, il
suffit d'utiliser ce fichier de mise en page. Donc, si nous avons plusieurs mises en page, nous pouvons créer une
autre mise en page. Si vous vouliez qu'un type d' utilisateur puisse voir une mise en page
et un autre type d'utilisateur pour voir une autre mise en ou avoir
des mises en page différentes par page, quelle qu'elle soit, vous pouvez en fait dicter lequel
il faut en utiliser un. Toutes ces choses
arriveront en temps voulu. Je vais donc continuer la visite des
fichiers et des dossiers. Et passons à
l'application settings.js. Sur l'application settings.js, Zen est comme un
fichier de configuration où nous spécifions essentiellement des éléments
comme des chaînes de connexion. Vous savez, où rechercher la base de données dans des paramètres statiques que nous devons mettre
en place pour nous assurer que certaines fonctionnalités
fonctionnent de manière particulière. Tous ces éléments
peuvent être définis dans ce fichier de paramètres d'application. Nous avons le program.cs, qui est très similaire à ce que nous aurions vu
dans notre C-Sharp dans divers domaines, où chaque fois que nous avons
créé un nouveau projet, nous avions un fichier appelé program.cs qui était lié
méthode up appelée moyenne. C'est la même chose, program.cs, et voici notre méthode principale. Donc, tout ce qui se passe,
c'est que lorsque vous appuyez sur IS Express, notre démarrage à chaud, appelant
simplement le programme, appelant la méthode moyenne. Et la méthode principale dit construire
et exécuter l'application. Alors, où sait-il quelles configurations
mettre en place ? Il utilise le
fichier de démarrage et le démarrage ici représente le
démarrage du fichier CS, qui est un autre endroit
où vivent les configurations. Ici, dans le constructeur de démarrage, vous voyez qu'ils font
ce que nous appelons l'injection. Plus tard, vous
obtenez un standard, mais ils injectent
un objet de configuration
IA
qui représente fichier JSON settings.js
OER. Ainsi, si quels que soient
les paramètres statiques que nous y
mettons, nous puissions y accéder,
puis via le code jusqu'à ce qu'il utilise cette configuration lorsque vous initialisez
cette fonctionnalité. Donc, le fichier de démarrage est essentiellement l'endroit où se produit toute l'initialisation de la
fonctionnalité. Comme vous le voyez
ici, nous voyons adresse ou des pages de
services plus tard, lorsque nous ajoutons l'
authentification et d'autres
éléments au projet, vous verrez que nous devons
venir ici et le faire savoir. Ok, veuillez utiliser ce module, veuillez utiliser cet intergiciel, veuillez utiliser cette
fonctionnalité que nous
ajouterons à ce fichier au
fur et à mesure que l'application se développe. Le point de démarrage css
vraiment juste en charge de dicter ce qui devrait être en
place au moment du démarrage de l'
application. Donc, si je gâche quelque chose dans ce fichier ou certaines
choses dans ce fichier, si je devais
entrer dans cette ligne car je ne pense pas que cette
ligne semble utile. Et puis j'ai essayé de courir, puis il y aura cette
erreur disant qu'il
y a une inadéquation entre ce que
je veux faire et les
fonctionnalités disponibles pour moi sans essayer de lire
ce mot de flèche -mot. J'ai vu
que vous essayez initialiser la compilation
d'exécution, mais je n'ai pas vu où
vous m'avez dit que je pouvais
utiliser le jeu de fonctionnalités pour la compilation de l'
exécution. Cette ligne que j'ai commentée fait partie intégrante des fonctionnalités qui doivent être appelées
ailleurs dans l'application. Ainsi, au fur et à mesure que vous
comprenez qui fonctionne .NET Core, vous comprendrez quelles
bibliothèques doivent aller où aller. Encore une fois, ce n'est pas
quelque chose que vous devez mémoriser. Il vous suffit d'
avoir une bonne idée du
fonctionnement de cette chose afin que,
lorsque vous voulez une nouvelle fonctionnalité, vous puissiez faire des recherches
adéquatement pour
savoir ce que vous devez inclure pour la
mettre en service. . C'est vraiment tout pour le tour
de la structure des dossiers. Lorsque nous reviendrons, nous
commencerons à travailler un peu plus sur notre interface et à explorer
comment tout est câblé.
4. Comprendre la syntaxe des rasages: Bienvenue les gars de retour. Dans cette leçon, nous allons
examiner
comment expérimenter
nos réseaux de pêches. J'ignore le modificateur de pH
ou assez de barre, et je regarde même comment
nous pouvons probablement injecter nos bouleversements dans
différents endroits, comme nous l'avons vu
injecter dans la startup. Commençons donc par déterminer
ce que nous voulions. Je vais donc créer
une page très simple. Je ne fais que fermer toutes les
instructions décrites. Ensuite, dans les pages, je vais
créer un nouveau dossier. C'est donc toujours une
bonne idée, car lorsque vous avez les
différents domaines, ce qui se passe, c'est que vous
avez trois opérations principales. Créez, lisez, mettez à jour, supprimez. La plupart du temps, vous
souhaitez créer un dossier. Et puis, à l'intérieur de ce
dossier, vous disposerez des différentes pages pour prendre en charge
les différentes fonctionnalités. Puisque nous effectuons des réservations de voitures, la première chose que
nous aurions
probablement besoin serait les voitures. Très bien, je vais
avoir un dossier appelé voitures. Et à l'intérieur de ce
dossier pour les voitures, j'aurais un fichier d'index qui représenterait
la première page sur laquelle vous atterrissez lorsque vous votez
pour regarder les voitures, ce qui
ressemblerait généralement à la liste des voitures. Vous avez la modification, vous avez la suppression et vous devez lire, ce qui signifie que je regarde les détails
d'une voiture particulière. Nous ne sommes pas prêts à affronter
toutes ces complications. J'explique simplement pourquoi nous avons cette structure de dossiers
que vous verrez comme un thème commun tout au long ce cours et dans la
plupart des applications Web, indépendamment de la technologie
ou du stock étant utilisé à l'intérieur des voitures, créons un fichier d'index. Je vais donc simplement aller de l'
avant et cliquer avec le bouton droit de la souris et
cliquer sur Ajouter une page de rasoir. Et ce que nous faisons ici, c'est
utiliser les outils d'échafaudage. Les outils d'échafaudage
nous permettent de générer des fichiers. Je suppose que Microsoft
a vu que nous
connaissions le type de fichiers que
nous voulions, notre framework. Et ce sont des choses
que vous devriez répéter manuellement h fois. Voici donc l'outil d'échafaudage. Utilisez-le et nous ferons la
majeure partie du travail lourd, en
mettant tout le B6 veillant à ne
rien oublier et que vous pourrez
continuer à partir de là. Je suppose donc que c'est pourquoi ils nous ont
donné ce joli outil. Nous allons juste créer
un pH de résultat vide pour non, je suis allé sur Add et je
vais l'appeler index.html, CSS HTML, et c'est
déjà là pour moi. Donc, je vais juste aller de
l'avant et appuyer sur Add. Maintenant, j'ai ce
nouveau fichier d'index. Donc, si nous regardons à nouveau, nous voyons des pages barre
oblique que je
vous donne juste une idée de l'URL parce que l'index
sera toujours le premier fichier. Ainsi, lorsque nous allons à barre oblique, il recherchera automatiquement
le fichier d'index pour le
charger en premier. Très bien, donc ce que nous
voulons faire ici, je vais dire Afficher les données. Nous allons taper ce
truc manuellement nous-mêmes. Je suis allé dire titre. N'oubliez pas qu'il est
affiché, le type de données est un espace réservé qui
alimente la mise en page. Et je vais juste
voir la liste des voitures. Très bien ? Ce que je veux faire,
c'est juste dire H1, liste des voitures, des
choses simples. Nous ne sommes pas prêts à être
trop compliqués ou simplement à transpirer ou à appétits
et à comprendre quoi, et si vous regardez
cette page d'index, vous verrez qu'elle
ressemble beaucoup à l'autre page d'index. La raison pour laquelle les
pages d'index ne sont pas touchées est que les sous-dossiers dans lesquels
elles se trouvent sont différents. Cet index se trouve dans
les pages générales, il s'agit donc de toute la page de l'application. Cependant, lorsque nous allons
dans les barres obliques, voitures
smash auront leur propre première page et
son fichier d'index est
différent, mais il verra qu'ils
ont les mêmes 2s directs. Il s'agit d'une page, Voici
un modèle et utilise
l' espace de noms pour ce modèle par rapport à l'
espace de noms de l'autre. Une fois de plus, nous récupérons
notre code derrière le fichier pour notre modèle d'index. Si je voulais accéder
à cette nouvelle page, je
devrais modifier mes allèles et laisser la
barre de navigation avoir le nouveau lien. Je vais donc juste en copier
un qui existe là. Je vais simplement copier le lien de la page d'accueil
existant et le modifier pour
que nous n'ayons pas de zone. Nous avons la page ASP. Où l'ASP est-il payé ? Ainsi, les pages ASP ne sont plus
obligées d'index. C'est l'indice de slash cars. Notez que nous n'avons pas nécessairement besoin l'extension où nous
n'avons pas besoin de l'extension. C'est donc là qu'ils ont entravé certaines choses
auxquelles nous sommes
habitués avec ba, HTML basique. Parce que si vous le
regardez attentivement, il n'y a pas d'étiquette de dérive H ici. Ne pas dire que nous ne pouvons pas utiliser
une nature si nous le pouvions. On pourrait dire qu'il est
égal à Butt in. Si nous voulons
voir hf est égal à construire l'URL exacte pour
accéder d'une application à l' , c'est que les voitures vont
être un peu difficiles
car nous ne pouvons pas simplement voir le nom de fichier comme nous ne pouvions pas
de base CSS et HTML. Donc, ce qu'ils nous ont donné
sont appelés des assistants de balises, où ils diront juste 0 moi fonction du chemin d'accès de
la structure du dossier. Et je vais générer
cette référence H pour vous. Donc la page ASP est égale à, et je sais que je dois
aller à slash cars. La première barre oblique signifie donc la
racine de l'application. Ensuite, je dois
aller dans le dossier des voitures. Je n'ai pas eu à
aller dans le fichier d'index. C'est là que ce
lien devrait mener. Il générera le riff
H au moment de l'exécution. Nous verrons cela dans quelques uns. Je veux donc que ça parle de voitures. Très bien, nous avons maintenant
une nouvelle URL avec une nouvelle page. Et je vais aller de
l'avant et courir comme,
oh, on ne fait que des trucs
d'interface utilisateur. Nous pouvons simplement faire le contrôle F5. Nous n'avons pas besoin de
déboguer à chaque fois car cette méthode
est un peu plus rapide. Nous sommes en train de charger
notre page d'application. N'oubliez pas que c'est
notre page d'accueil que nous avons migrée depuis nos fichiers statiques. Et si vous
vouliez migrer les autres, je
serai probablement une bonne pratique pour vous. Mais en ce moment, nous
commençons par ça. Et puis quand je clique sur les voitures, avant même de cliquer sur les voitures,
c'est inspecter l'élément. L'élément Inspect
va nous
montrer la référence H pour savoir comment nous y arriverons. Si vous regardez la peur des oreillettes, cela signifie
que vous rentrez chez vous. Slash cars signifie objectif
de l'URL de base, ce que nous
voyons dans le navigateur, localhost avec ce numéro de
port slash cars. Si nous examinons celui-ci, vous
verrez la confidentialité oblique localhost. Quand j'y vais
et j'ai heurté les voitures. Ensuite, je vois que j'
arrive sur ma nouvelle page, qui est une liste de cartes. Vous voyez qu'il n'avait même pas
à dire particulièrement index.html. Parce que par défaut, partout navigateur va d'abord
sur la page d'index. C'est donc tout ce
qu'il faut pour créer un nouveau lien et que les
pages se voient. Très bien,
regardons maintenant le fichier de code et le
fichier HTML peut interagir avec lui. En ce moment, j'affiche cette liste de voitures
directement sur la page. Ce n'est peut-être pas toujours
le cas, comme nous l'avons vu lorsque nous faisions
le codage C Sharp. Parfois, les données devant
être affichées ou interactives avec ces données
dynamiques à partir de l'entrée de l'utilisateur. Il doit être dans une
variable d'une manière ou d'une autre, mais nous devons toujours l'afficher. Et si je voulais
mettre ce morceau de texte dans une variable dans le fichier de code,
puis l'afficher. Je vais juste le couper dans
le fichier de code. Ce que je vais faire à l'intérieur de notre classe,
c'est lui donner une nouvelle propriété. Donc je vais juste dire prop, appuyer deux fois sur Tab,
puis je dis chaîne. Et cela va
frapper ensuite sur get one, la page charge cette méthode appelée get est la première
méthode qui est appelée. Chaque fois que vous
accédez à une page, vous allez cliquer dessus, obtenir ce que vous voulez
préparer pour cette page. Si vous devez charger des données, si vous devez vous asseoir sur un message
comme si nous étions sur le point de le faire, vous devez
vous assurer de le faire sur Git, tout
cela
sera prêt au moment où le pH sera
chargé à l'utilisateur. Dans ce cas, je veux voir cap est égal aux
tics que je viens de lier, qui est une liste de voitures. Non, je prépare cette variable. Je m'assure que la
valeur est disponible avant le patient ou c'est comment faire apparaître la valeur sur la page ? Eh bien, sur la page elle-même, où je le veux, qui serait
entre ces balises H1. Et puis c'est ce que
nous appelons les vues de
rasoir à effacer ou augmenter une syntaxe. La syntaxe de raison nous
permet plutôt d' entrelacer un
code C-Sharp avec notre code HTML. Très bien ? Donc, chaque fois que
vous voyez
une annonce vous préparant à
écrire du code C-Sharp, car il s'agit d'un code C-Sharp qui est un espace de noms de C-sharp. Pourtant, nous voyons du HTML dans le pH. Très bien, permettez-moi de
vous montrer si je voulais imprimer quelque chose du
côté C au lieu du HTML, tout ce dont j'ai besoin est de signer. Fondamentalement, puisque cette directive
que vous êtes sur le point de taper C-sharp, aucun modèle ne ressemble
à une variable statique ou globale
qui représente un objet du modèle, un objet du modèle, c'est-à-dire le code tout ce qui est public
dans le code derrière fichier comme ce titre est maintenant disponible pour
moi en voyant le point de modèle. Ensuite, je reçois toutes les propriétés du modèle,
y compris les propriétés personnalisées. Vous verrez certains que
vous n'en avez pas mis. Pas de problème, ne vous découragez pas, ne soyez pas agité ou quoi que ce soit. Mais si vous regardez de près,
vous voyez frapper. C'est celui que je viens de créer. Je peux juste dire le titre model.py. Et ensuite, si je l'enregistre et
que je rafraîchis la page et ce que vous pouvez faire
pendant que vous êtes à ce stade, vous pouvez toujours faire une build à
l'aide de Control Shift et B. Et ensuite, vous pouvez simplement
rafraîchir la page. Vous avez probablement toujours ouvert à partir du débogage. Mais vous voyez ici que nous voyons toujours
une liste de voitures. Et si vous inspectez un élément, rien n'indique
qu'il s'agit de C-Sharp ou de HTML. En ce qui concerne le Brésil, il ne voit que le HTML. C'est donc une
offre polaire, c'est une syntaxe. Nous pouvons
mettre n'importe quoi de façon dynamique. Si je voulais
changer le titre au lieu de conserver
la page entière. Et si je devais afficher
plusieurs endroits au lieu de
prendre plusieurs bases statiques,
je le mets dans une variable. Ici. Je le change de variable juste pour que nous
sachions que cela fonctionne. Et je suis allé faire une construction. Maintenant, une fois cette construction terminée, je vais faire un rafraîchissement. Et puis C, on y va. Ce truc de voitures de variable. Il est donc
beaucoup plus facile de créer une page dynamique où nous devrons peut-être modifier
le texte à la volée. Nous le changeons une fois. Et ensuite, nous pouvons simplement y
répondre
autant de fois que nous le voulons dans notre
code. Contrairement au moment où nous
faisions nos pages statiques et si nous additionnons la difficulté
prend plusieurs endroits, nous devons aller
manuellement et changer. C'est partout. Nous
pouvons le faire ici, juste agréable et facile. Donc, si je réplique toutes ces pages sont croisées ou toutes
ces balises, c'est le cas. Si je le change une fois, il a changé autant de fois. Très bien, c'est
un moyen facile et agréable de comprendre le fonctionnement de
la syntaxe. Comment placer quelque chose
dans le fichier de code et y accéder à l'intérieur
de la page Razor. Ensuite, je vais vous
montrer notre première partie de ce que nous appelons l'injection de
dépendances. Ce que nous allons donc
faire, c'est déplacer ce texte de titre de la variable
C-sharp ici. Et nous allons le
mettre dans les paramètres de l'application puis nous allons
afficher un tout, vous pouvez simplement injecter un abcès. Ces configurations, mangent assez facilement et les affichent sur
la page de la même manière.
5. Message des paramètres: Nous allons maintenant examiner
comment injecter des dépendances dans notre pH et accéder aux données d'une manière très découplée. C'est donc
l'une des quatre caractéristiques les plus et les plus
marquees requête
de liaison descendante qui fait ce que nous appelons l'injection de dépendances, qui est un
principe très important dans un développement solide. Le D dans le mot solide signifie en fait
l'injection de dépendances. Il y a tellement de
principes qui nous
aideraient à pratiquer des pratiques de codage propres
et bonnes. Et l'injection de dépendance
est très importante. Et l'injection de
dépendances .NET Core Mix, très, très facile pour nous. Ce que nous allons faire, c'est dans le fichier JSON des paramètres de l'application, je vais mettre
une nouvelle configuration. Et encore une fois, ce n'est qu' à des fins de démonstration
pour que nous puissions comprendre comment tout
fonctionne et tout. Nous allons donc
juste poser une virgule. Et puis je suis allé
créer une nouvelle section ou un nouveau nœud pour dire que
c'est un message. Donc, j'appelle ça un message. Donc, fondamentalement, ce que nous avons est
comme une paire clé et valeur. Donc, je crée mon volume et ils sont
tous séparés par des virgules. Vous remarquez que la journalisation est la clé et que la valeur
correspond à ce que nous appelons un objet. Et l'objet possède une clé
qui se trouve dans un autre objet, et chaque clé a sa propre valeur. Chaque fois que vous voyez un deux-points, ce qui est à droite
est la valeur, ce qui est à gauche est la clé. Ensuite, une
virgule sépare les nœuds principaux. Il s'agit donc d'un nœud Min
séparant un hôte de charge, qui est une autre charge
ou un appairage de clés Vardy. Et puis c'est une virgule. Nous créons donc notre propre message de paire de clés
valide. Et puis c'est la syntaxe JSON de
base. Agréable et facile à comprendre. Le message va
avoir la valeur. Voici la liste des voitures. Message simple de leçon. Rien de trop chic. Je l'ai dit
au contraire. Comment puis-je accéder à ce
texte dans la page pour afficher
davantage sur
l'ADN à l'utilisateur. Donc, ce que nous devons faire, c'est
aller dans notre fichier HTML index.js. Je vais créer
une autre propriété. Je vais appeler
ça manque. Ainsi, pour dupliquer son
contrôle D ou Control CNV, similaire à Visa Studio Code, mais Control D fonctionne également. J'ai une autre propriété. J'appelle ça un message. Et j'ai besoin d'un message assis pour avoir la valeur du fichier des choses
opposées, ce qui signifie que je dois
accéder à la configuration. Ainsi, comme nous l'avons mentionné
dans le fichier de démarrage, nous avons injecté l'objet
de configuration ici. Et puis cela
nous a permis d'accéder à n'importe quoi, ou du moins je les charge
parce que nous n'avions pas écrit ceci. Celui qui a écrit
cela a fait cette injection pour pouvoir accéder à la configuration
qui le fera. Nous allons
suivre ce modèle. Les principes de l'injection de
dépendance 1, vous avez un constructeur, donc nous allons
écrire C TOR, appuyez deux fois sur Tab, puis nous
obtiendrons le constructeur. Cela commence par
les listes de paramètres, ce qui est très bien. Mais nous devons ensuite lui dire quelles dépendances
il devrait aider. Je vais donc lui dire qu'
il
devrait utiliser la configuration I. Et si vous le souhaitez, vous pouvez simplement entrer dans le
démarrage à propos de CS et vous pouvez le prendre en configuration. Et nous appelons la configuration des
variables. La ligne rouge signifie que nous avons
besoin d'une bibliothèque, alors contrôlez point et je peux
simplement aller de l'avant et appuyer sur Entrée. Il inclura donc
l'instruction use. Donc nous le faisons simplement et la ligne rouge de
l'instruction d'utilisation disparaît. Non, je dois l'initialiser. Je lui dis donc que j'ai
besoin de la figuration des icônes de l'inversion du conteneur de
contrôle ou je verrai le conteneur. Le démarrage
place essentiellement tout ce
qui se trouve dans ce conteneur
entre
le démarrage dans le fichier program.cs. Ils mettent ces choses dans
le conteneur, puis n'importe où dans mon application, je peux y accéder
depuis le conteneur. Donc littéralement chargé tout,
Tout à partir de
ce
fichier de paramètres d'application dans ce conteneur. Et je vois que je
veux accéder à ce fichier, qui est ensuite entravé par ce type appelé configuration
ouïghour. J'ai besoin d'une variable locale
que je peux utiliser lorsque je suis sur cette page pour accéder
est comme une copie. Donc ce que je vais
faire, c'est juste dire conduit de
commande après l'
avoir mis dans le constructeur. Et puis j'ai dit créer et attribuer une configuration de champ, et cela fait automatiquement ce processus d'injection pour moi. Maintenant, j'ai cette version locale juste pour que nous puissions les
voir différemment. Je vais appeler celui-ci
un trait de soulignement. Et j'ai tendance à le faire
avec mes champs sur la configuration de partition et les points de
contrôle à renommer
partout ailleurs, donc cela élimine cette erreur. Maintenant que cet objet de
configuration a été injecté un objet et initialisé
et accessible à la page. Je peux maintenant dire que mon message doit être
égal à la configuration. C'est bon ? L'objet de configuration me
permet de voir, me
donner la clé de ce à quoi vous voulez accéder
afin que rappelez-vous que nous venons discuter de la
paire clé-valeur est
la clé que je voulais
accéder au message. Je vais voir que
la clé est le message. Rappelez-vous d'après les ARI, c'est
essentiellement un tableau. Ce fichier est
essentiellement transformé
en tableau auquel je peux maintenant accéder en utilisant la clé
comme indice. Une fois que j'ai fait cela, j'ai maintenant une nouvelle variable appelée message accessible sur ma page
d'index. Je peux donc en-dessous du titre, mettre peut-être un h4 tags. Ensuite, nous
allons simplement
les séparer avec une étiquette RH. est un peu fantaisie avec ça. Et j'ai dit que
je signerais un point de modèle. Et puis rappelez-vous
qu'une fois que j'ai dit model.py a accès à toutes
les propriétés qui se trouvent
dans la classe de modèle, peut accéder au message. Aucun message n'est simplement quelque chose que nous avons tapé
et mis dans une variable. Le message se débrouille tout
le long de la contrariété. Vous voyez jusqu'où
sommes-nous bouleversants ? Il possède la valeur et la
paire de clés du message. Et puis sur la page, chargez-vous. Je vois que lorsque
vous chargez cette page, je souhaite obtenir une copie de cet objet à partir de la dépendance
ou du conteneur IOC. Et je crée
mon exemplaire localement. Et puis à la volée, je peux voir où la
page est en cours de chargement,
aller dans cette copie locale
du fichier de paramètres de l'application, obtenir la valeur qui
a le message clé. Quand je fais tout cela, je peux faire une construction. Et j'ai toujours ma page
du débogage plus tôt et vous
voyez qu'elle est juste mise à jour pour moi ? Non. Je vois ce
message provenant fichier
de paramètres de l'application. C'est essentiellement tout ce que
l'injection de dépendances fonctionne à mesure que l'application se développe. Nous allons en
voir davantage. Mais au moins, c'est
un petit aperçu de la façon dont vous pouvez accéder aux données d'autres parties de l'application tout les affichant dans la page. Et vos utilisateurs
ne seraient jamais plus sages quant à l'origine de ces
données, qu'il
s'agisse d'une base de données ou d'une variable
en arrière-plan. Mais nous sommes en contrôle, donc nous
savons comment le rendre dynamique. Les utilisateurs ne voyant
que ce qui semble être une page très statique, la
chargent sur eux.
6. Ajouter un framework d'entité: Jusqu'à présent, nous avons
examiné certaines
des bases de notre code C-Sharp pour que les pages
Razor affichent des dates
dynamiques. La réalité, cependant, c'est
que nous, dans notre scénario, nous n'allons
pas vraiment coder
ce type de valeurs en dur , ajouter des variables
et afficher, surtout compte tenu du type d'
application que nous sommes qui est une
application de réservation de voiture où vous aurez
besoin d' une liste de cartes qui
peuvent être prouvées comme modifiées. Une nouvelle voiture arrive
dans l'entreprise, on est à la retraite, etc. Où nous sommes allés après avoir
géré la réservation. Ce que nous devons donc faire, c'est trouver un moyen très dynamique de
stocker réellement ce type de données. Ensuite, nous devons utiliser
les services d' Entity Framework afin
que nous puissions créer la base de données pour
interagir avec la base de données
et, trois, continuer à
construire sur la base de données. Ce que nous allons
faire avant d'
entrer dans l'une des complications,
c'est de déterminer ce que nous devons stocker, nous allons rendre les choses relativement simples,
mais
c' est
assez compliqué pour que nous puissions obtenir une bonne idée de ce qui doit être couvert dans un scénario
général. Ce que nous voulons faire, c'est
employer le S en solide, c'
est-à-dire une séparation des préoccupations. Et le principe
sous-jacent à cela est
une, une méthode ou un fichier
ne devrait jamais avoir plus d'
une responsabilité. C'est pourquoi il est bon que pour chaque page il y ait un fichier de code
dédié. Donc, toute la responsabilité de ce fichier de code est liée à cette page. Ce que nous allons
faire, c'est l'enlever uniquement des fichiers et nous allons
l'appliquer à des projets. Maintenant que nous
réfléchissons aux interactions de base de données, nous devons
créer un autre projet qui hébergera ou complète plutôt tous les objets liés à nos
bases de données. Je vais simplement
réduire ou réduire
la réservation de voiture et je
suis allé directement à la solution. Cliquez sur Ajouter. Et je vais
créer un nouveau projet. À partir de cette liste de projets, nous allons choisir
une bibliothèque de classes. Donc, si vous ne l'avez pas
dans le projet récent stimule, vous
pouvez toujours rechercher. Ce que nous voulons, c'est une bibliothèque de classe
C-Sharp. Vous pouvez aller de l'avant et sélectionner
cela et nous appelons cette réservation actuelle
vers le point Theta. Le nom va donc
signifier qu'il s'agit du projet de données. Hit Next, et nous
voulons le garder en
tant que projet Dotnet F5 et créer une bibliothèque de classes de version très
dépouillée de l'obligation C-sharp sont deux projets C-sharp
qui étaient habitués. Parce que vous pouvez voir que
ce projet dit simplement fichier
CSV et le seul classificateur, il ressemble presque une application console et
les exposants connaissent program.cs. Et si vous regardez même dans
le fichier de projet réel, vous verrez que toutes les larmes ne
sont que le cadre cible. Si vous revenez sur votre console, les applications de C-sharp, vous remarquerez qu'elles disposent également d'une instruction d'exécution pour lui
indiquer qu'il s'agit
d'un fichier exécutable. Ce que nous allons
devoir faire ici c'est supprimer la première classe, c'est définir quelques classes. Donc, notre, ce que nous faisons,
c'est créer des entités, je pourrais vraiment
demander des fichiers qui seront convertis en tables
de base de données. Quoi qu'il en soit, et nous avons
déjà regardé OOP, quelles que soient
nos propriétés des données que nous
voudrions stocker. Nous sommes en train de créer notre classe
pour représenter cela, ce qui sera ensuite transformé en table
via l'API, c'est que Entity Framework
nous permet pour l'instant, nous
voulions simplement comprendre comment nous
concevons le modèle de domaine. Donc, notre premier modèle laissez-moi, depuis que nous avons
commencé avec les voitures, sera de quatre cartes. Nous voulons donc une table
pour ranger les voitures. Quelles sont les propriétés
des voitures que nous devons stocker ? En général,
cela peut différer fonction des besoins de
l'entreprise, des différents scénarios. Je vais donc juste
fonder mon scénario. Vous pourriez faire un
peu plus ou financer qu'il faut faire un
peu moins que moi. Mais tant que vous comprenez la portée générale de ce que
nous essayons d'accomplir, cela ne pose aucun problème. Ce que nous devons faire, c'est créer notre première leçon en cliquant avec
le bouton droit sur le projet de données, j'ajoute une classe et je
vais l'appeler symbole de voiture. À l'intérieur de la voiture. Nous allons rendre
cette classe publique. Ensuite, nous défendons
les propriétés. La première propriété de
n'importe quelle table de base de données. Si vous n'avez pas encore fait
de bases de données, ne vous inquiétez pas pour moi
aussi sympathique que possible. Si vous connaissez bien
les bases de données, vous saurez que la clé commence
toujours par une clé primaire qui
s'incrémente automatiquement. Si vous connaissez
l'utilisation de SQL Server ou ainsi de suite. Vous savez que vous devez
franchir quelques étapes, vous devez vous asseoir et contraindre
l'identité, vous devez également lui faire savoir le plus grand nombre d'incréments
IN1 et ainsi de suite. Avec Entity Framework
ou lors de la conception d'une entité dont
nous savons que nous allons
utiliser Entity
Framework pour gérer. Tout ce que vous avez vraiment
à faire, c'est de l'appeler ID. Juste
en faisant cela différemment où
nous saurons que, accord, c'est la clé primaire et qu'elle devrait être
auto-incrémentielle. C'est ça. Par conséquent, ayez toujours la
clé primaire pour toutes les entités, la plupart ,
sinon toutes, 90 % de vos entités doivent toujours avoir une valeur de
clé primaire appelée ID. Si vous ne voulez pas l'appeler ID, vous devrez peut-être faire d'autres choses. Utiliser Entity Framework pour qu'il soit reconnu comme clé primaire. Mais entre l'appel d'ID, d'ID de voiture
ou de nom de table, ces deux-là garantiront que Entity Framework Core était
considéré comme la clé primaire. Nous avons une pièce d'identité, de
quoi avons-nous besoin ? Je vais dire
public chaque année, peut-être que l'année du
véhicule est aussi importante. Je vais stocker l'année. Et la prochaine chose
que je vais
stocker , c'est le
nom de la corde , le nom du véhicule, la
Toyota Yaris, etc. Je vais rester
simple et c' est
toujours lancer une balle. La voiture aurait
créé notre première entité. Maintenant, la prochaine chose dont
nous avons besoin pour que Entity Framework reconnaisse que cette classe doit être une table, est appelée contexte DB. Donc DB est l'abréviation du contexte de
base de données, ce qui signifie que je regarde toutes les ressources de la base de données,
et je les reconnais
en tant que telles. Nous allons
configurer le contexte DB. Nous n'allons pas encore
vous connecter ou créer de base de données. Nous sommes juste en train de préparer
le terrain, n'est-ce pas ? Non. Je vais
cliquer à nouveau avec le bouton droit de la souris et ajouter un autre fichier, nouvel élément ou une classe plutôt. Et je vais appeler
ça une réservation de voiture. Contexte DB, niacine, nom
facile à retenir. Carb recherche des contextes DVI, juste un autre fichier de classe. Maintenant, le contexte DB va
de nouveau être public. Et il va hériter d'une classe
de base qui nous est donnée par Entity Framework
appelée DB context. En tapant simplement le contexte DB. Et si vous donnez quelques secondes à Visual
Studio, vous remarquerez, ok,
merveilles et carnet d'erreurs, pour utiliser
les contextes DVI, vous devez installer un package
appelé NTD Framework. Vous avez donc Entity Framework et Anti Différent Work Court. Nous utilisons Dotnet Core, donc nous devons utiliser
Entity Framework Core, qui est le plus récent et le
plus important d'Entity Framework. génial, c'est que nous devons utiliser un gestionnaire de paquets. Donc, au lieu de devoir
trouver des choses manuellement, Visual Studio est livré avec un gestionnaire de paquets
appelé New get. Nous avons deux options.
Nous pouvons lui permettre d' aller de l'avant et de le trouver
pour nous et de l'installer. Ou nous pourrions aller manuellement, cliquer avec le bouton droit et cliquer sur
Gérer les paquets NuGet. Il est donc bon de comprendre
toutes vos options, car le développeur qui sait qu'il a besoin Entity Framework commencerait
probablement ici. Vous
iriez probablement à NuGet, chez Bros.
Et puis il verrait tous les paquets à sa
disposition. Et puis il
verrait en fait que vous avez Microsoft dot Entity Framework
Core dot SQL Server. Et il y a celui
qui a été annoncé pour dire que j'en ai un tas
d'autres, mais nous n'allons pas nous
inquiéter de
ceux dont vous n'avez pas besoin. En fait, nous allons
utiliser des bases de données SQL Server
dans différentes bases de données open source et disponibles pour la plupart des moteurs de
base de données. Dans MySQL, postgres
SQL sequel light, tous sont des moteurs de base de données ou des fournisseurs
de bases de données différents. Into the framework fournit des
API qui vous permettent d'
utiliser C-sharp pour parler
à n'importe quelle porte unique. Cependant, si, puisque
nous utilisons SQL Server, nous pouvons simplement aller de l'avant
et l'installer dans différents points de travail
SQL Server, ce qui nous donnera les API
SQL Server
ainsi que la bibliothèque de base
pour Entity Framework Core Je vais donc utiliser le gestionnaire de paquets
NuGet. Et tout ce que j'ai à faire, c'est
appuyer sur cette flèche vers le bas. Nous pouvons choisir une version. Nous voyons qu'il s'agit de la
dernière version stable. Il n'est pas nécessaire de modifier cela. Appuyez sur Installer,
donnez-vous quelques secondes. Vous pouvez obtenir des
licences et des accords prononcés. Et en tant que commorbides, cliquez
simplement sur OK et acceptez et
indiquez l'heure à laquelle il est installé. Et lorsque nous reviendrons
au projet CS, vous verrez qu'un
groupe d'éléments est ajouté à l'endroit où les références de package
sont placées. C'est très bien. Nous
pouvons laisser cela faire son travail
en arrière-plan. Mais maintenant, lorsque nous utilisons deux contextes de
dB et que nous
contrôlons, nous voyons que nous avons la possibilité d'
ajouter simplement l'espace de noms. C'était notre premier
avant-goût de la façon dont nous pouvons utiliser gestionnaire de paquets
NuGet pour ajouter bibliothèques qui sont
intrinsèquement manquantes. Allez-y à la déclaration d'utilisation. Nous avons maintenant le contexte DB. Pour que nous puissions informer le contexte de la base de données
de ce que doivent être les tables. Nous devons ajouter des bases de données publiques. Ensuite, nous disons qu'il crée une structure d'entité
Db, Db cities. Parlez pour une table. Le contexte représente la base de données, les
BB sets représentent une table. Nous devons fournir le modèle lequel ces tableaux
devraient être basés. Eh bien, nous avons créé notre
modèle sous la forme d'une voiture. Quelqu'un pour dire base de données. Vous aurez une table
en voiture modelée. Et vous devriez appeler ça des voitures lorsqu' il est créé dans la base de données
réelle. Regardons
ça encore une fois. Cette classe complète
représente notre base tous les actifs qui
seront présents pour afficher sur
tous les actifs qui
seront présents pour afficher les tables, les procédures
stockées, etc. Une fois que nous voulons ajouter une table, nous voulons que la moitié crée le modèle que
le tableau doit suivre. Donc, dans le cas de la voiture, nous lui avons donné les propriétés
que nous savons faire le cours par non. Cela montre simplement
comment notre classe
ressemble à une table en termes de développement de
bases de données. Nous venons de créer une classe
avec toutes les propriétés, tous les champs dont nous savons que table ou
notre table ont besoin pour
avoir les types de données. Ensuite, nous disons au contexte
de la base de données que j'ai besoin d'une nouvelle table ou d'un
ensemble DV de type car. Et je voulais appeler les voitures. Quand nous reviendrons, ce que nous
allons faire, c'est de mettre en place mon agression où nous
en disons une, générer du code qui créera la base de données et nous
évaluerons comment cela
se présente et nous allons réellement nous y retrouver. cette base de données et
voir que tout cela va fonctionner comme
nous
en parlons. Non.
7. Ajouter une base de données à un projet: Bienvenue les gars de retour. Donc
maintenant, nous allons être assis ou une base de données réelle. Nous avons déjà défini notre contexte, qui représente essentiellement une
connexion à la base de données. Nous avons déjà créé
au moins une entité ou une table pour cette base de données. Non, nous devons une fois que c'est ce que nous appelons une chaîne de connexion. Et ensuite, pour créer ce que
nous appelons une migration, qui serait l'ensemble
d'instructions que Entity Framework
pourrait utiliser pour informer comment elle va
créer la table et la base de données et
tout autres actifs qui doivent être
créés en conséquence. Passons en revue les
paramètres de notre application à partir de notre réservation de voiture. Et ce que nous devons faire ici,
c'est ajouter notre chaîne de connexion. Maintenant, la syntaxe d'
un flux de cliniciens ressemble à ceci, et je viens de l'ajouter
juste au-dessus de la journalisation. N'oubliez pas que tout cela
est un gros objet JSON. J'ajoute une nouvelle clé
appelée chaînes de connexion. Ensuite, cette clé a une valeur d'objet qui prend une
autre paire de valeurs de clé, connexion
par défaut,
puis il s'agit de la valeur. Voyons donc simplement
ce que cette valeur a. Cette valeur possède un serveur
et le nom du serveur correspond à peu près au nom de la machine ou à celui de l'instance de
base de données. Si vous n'êtes pas si familier
avec les bases de données, c'est très bien. Nous avons un fournisseur de
base de données intégré avec Visual Studio
appelé la base de données locale, la base locale
MS Sql Vous pouvez toujours accéder à
ces bases de données en accédant à l'Explorateur
d'objets SQL Server. Si vous ne voulez pas l'
avoir sur le côté comme moi, ils peuvent toujours accéder à View. Ensuite, vous pouvez rechercher l'Explorateur d'objets
SQL Server. Cela vous donne donc un accès
instantané à cette instance de base de données
et vous pouvez simplement
dérouler et c'est une barre oblique de base de données locale
MS SQL sur le B2C, tous ces serveurs de bases de données
sont égaux à Debian local, écrivez-le exactement comme vous le voyez. Parenthèse ouverte,
DB locale, parenthèse fermée. La double barre oblique est parce que
nous devons échapper à la barre oblique. Si nous avons une session,
vous obtenez cette erreur. Nous devons avoir cette double
barre oblique dans le contexte de
ce fichier et de la base de données locale MS SQL. Ensuite, nous avons un point-virgule
et nous indiquons la base de données est égale à la
réservation de voiture sur la base de données de score. Une fois de plus, nous n'avons pas encore
créé cette base de données, mais nous savons comment nous voulons que
la base de données soit appelée, donc nous l'informons à ce moment-là. Plus tard, vous
verrez que connexion de
confiance est égale à true et que plusieurs jeux de
résultats actifs sont égaux à vrai. Il s'agit donc d'
entités liées à la sécurité pour plus de facilité d'utilisation. Vous pouvez donc simplement
reproduire tout cela. Maintenant, après avoir inversé
notre chaîne de connexion, nous devons laisser l'application
ou qu'au démarrage vous devez utiliser cette
chaîne de connexion pour la base de données. Toujours dans notre application Web, nous allons
voir la startup. Ensuite, dans les services de configuration, nous allons enregistrer
notre thread de contextes DB. J'ai donc dit des services
qui ajoutent du contexte DB. Et puis je mets le
nom des contextes DVI. Et pendant que je fais cela, je regarde de l'autre côté et je
vois que j'ai un nom ici et un autre
de ce côté. En fait, c'est ce que
je voulais qu'on m'appelle. Je l'ai appelé le contexte Car book Up
DB par erreur. Je suis allé le mettre à jour, non ? Aucun carb ne recherche le contexte DB
du nom de fichier, puis met à jour
le nom de la classe en conséquence. Très bien, maintenant
que ce refacteur est terminé, je me sens un peu mieux et
je peux y retourner. Donc, les services pointent IDB, contexte et la façon dont j'ai
tapé des crochets avec le nom du contexte DB, puis nous avons les options. donc évident que ce n'est pas vraiment enregistré ce que nous
essayons de faire, d'où les lignes rouges. Ce que je vais faire, c'est le point de contrôle. Ensuite, cela va indiquer que je dois ajouter
une référence à mon projet de données de réservation de voiture. Très bien, donc nous l'avons dans
deux projets différents que les assemblages
différentiels
appelleront. Et pour le moment, Visual Studio ou la solution le voit. J'essaie de faire
référence à quelque chose qui n'est pas dans le projet
actuel, je vois dans
un autre projet. Voulez-vous ajouter la
référence que je suis allée dire oui, s'
il vous plaît, allez-y et
ajoutez la référence. Une fois que j'ai fait cela, vous verrez que cette valeur nulle change à cette couleur qui indique qu'il sait quel fichier il s'agit
et tout est. D'accord, mais j'ai toujours une autre erreur que je
vais contrôler. Et cela me dit que je dois
ajouter une instruction d'utilisation pour Entity Framework Core afin que
je puisse aller de
l'avant et le faire. Non, je n'ai plus d'erreurs. C'est un trou. Nous ajoutons ce peu de code avec les options d'utilisation
de SQL Server,
comme je l'ai dit, Entity Framework, core peut prendre en charge plusieurs moteurs
de base de données. Nous spécifions donc que
nous utilisons SQL Server ici. Et puis je regarde
dans la configuration. N'oubliez pas que tout cela
a été injecté précédemment, le point de configuration
obtient la chaîne de connexion. Il s'agit donc d'une fonction intégrée
de la configuration. Ils recherchaient
la connexion par défaut. Donc, cette connexion par défaut, et ensuite il
obtient cette valeur. Donc, tout ce que vous
avez appelé comme ça si vous ne vouliez pas appeler ça
une connexion par défaut avec moi, je voulais appeler la connexion
carbocation up, peu importe ce que vous appelez, nous devons juste obtenir cela
chaîne de connexion ici. Maintenant, faisons une facture rapide juste pour nous assurer que
nous n'avons
rien cassé pour construire
a été couronné de succès. Continuons. Donc, la prochaine étape,
je dois générer cette base de données. Comme je l'ai dit, nous devons
effectuer une migration et ensuite générer la base de données
après la migration. Ce que je vais faire une fois de plus dans le
projet de données, je vais passer à
Gérer les paquets NuGet. Ensuite, nous allons chercher le package Entity
Framework Core Dot Tools. Si vous ne le voyez pas ici, prêt comme pour moi, vous pouvez toujours aller de l'avant
et le chercher. Je le vois ici. Je vais juste aller de l'avant
et l'installer comme d'habitude. Allez-y et acceptez
toutes
les conditions générales et sachez
qu'il est installé. Permettez-moi de vous donner
un aperçu
rapide de ce que ces outils vous
permettent de faire. Si vous regardez la
description de la bibliothèque, cela indique qu'elle permet aux États-Unis d' utiliser des commandes couramment
utilisées. Vous avez ajouté une migration, c'est
ce que nous sommes sur le point de faire. Vous avez supprimé la base de données, obtenez des contextes DVI, des éléments liés à la
migration, des objets liés à l'
échafaudage et commandes de migration et de
génération de
scripts sans rapport. Il s'agit donc de toutes les
commandes et il s'agit en fait de
commandes PowerShell que nous allons exécuter à l'aide de
notre console Package Manager. Cette console Package Manager, si vous ne la voyez pas là où je l'ai dans ma
barre des tâches, une fois de plus, vous pouvez toujours accéder à
Outils, puis vous obtenez gestionnaire de
paquets et une console
Package Manager. Très bien, une fois que vous aurez fait cela, vous obtiendrez une fenêtre
similaire à celle-ci, où elle
vous demandera la commande. Ce que nous allons devoir faire, c'est modifier notre projet
par défaut ou
un projet de données, car
c'est là que se trouve notre contexte DB. C'est là que nous voulons que
nos migrations soient menées et que tout se passe
est lié à la vie. Je suis allé modifier la valeur par défaut, prédit un projet de données. Et puis je vais dire ajouter une migration de
tiret et il peut même appuyer sur Tab pour la
compléter pour vous. Ensuite, je vais appeler
cette migration initiale. Après cela, j'appuie simplement sur Entrée. Il va reconstruire le projet et j'obtiens cette erreur. Ne vous inquiétez pas. Il est donc
dit que mon projet de démarrage ne fait pas référence à cette
bibliothèque, c'est très bien. Ce package est
nécessaire pour
que les outils Framework Core fonctionnent. Ils
nous disent donc ce qui ne va pas. Pas de problème. Donc, mademoiselle fausse biomasse à
part. Allons arranger ça. Cliquez avec le bouton droit de la souris
sur notre projet Web. Utilisez NuGet. Et j'essaie juste de vous
montrer à quel point il
est facile d'entrer ces leviers
une fois qu'ils ont disparu, vous obtenez plus que
probablement. Allez-y,
allez sur NuGet et ensuite je vais coller le nom de la
bibliothèque qu'il a dit. Encore une fois, vous pouvez toujours
effectuer une recherche dans
la barre de recherche. Et une fois que je l'ai obtenu, je peux simplement l'installer. Lorsque c'est fait. Je vais maintenant revenir à la console Package Manager
et je vais simplement appuyer sur le bouton. Ainsi, lorsque vous appuyez sur la flèche vers le haut, vous obtenez la commande la
plus récente, tentée, au moins
tentée. Je vais donc juste appuyer sur, me
faire acheter cette migration,
appuyer à faire acheter cette migration, nouveau sur Entrée, et nulle part
obtenir une autre erreur. Je ne vais pas me cacher
ces arrestations parce que parfois on a tendance à oublier certaines
étapes et c'est
bon de voir les erreurs et de
savoir comment les surmonter. J'oublie clairement
quelques étapes ici, mais ce n'est pas un problème car la portée de l'erreur,
nous allons les corriger. Celui-ci dit donc
qu'il y avait une flèche pour accéder
aux services d'hébergement. Et il doit y avoir un constructeur qui prend en charge la configuration
transmise. Permettez-moi donc d'expliquer
exactement ce que cela dit. Bach, quand nous
aurions configuré dans notre classe de démarrage que chacun devrait utiliser
le contexte DB. Et je passerais
dans ces configurations. Ainsi, les options, à peu près
tout cet objet
appelé options, nous
permettraient de
mettre dans un certain nombre de paramètres différents
que nous voulons
utiliser et de maintenir la
base de données interagissant avec le moment où l'application
démarre votre entité. C'est très simple, non ? Non, la seule option
ici est d'
utiliser le
mélange sur la corde. Cependant, cela ne
suffit pas car même si nous sommes tendus à l'utilisation de cette
base de données et à des déconnexions, vous êtes ces
contextes DB et linéaires représentent la base de données qui est notre déconnexion et notre chaîne. Nous devons laisser nos contextes
DVI qu' il est censé
être un outil relatif, quelles que soient les options que
nous transmettons. Revenons à notre contexte DB et nous allons
créer un constructeur. Je vais donc lire CT OR et appuyer sur Tab, Tab. Et ce que nous devons
transmettre ici, ce options de contexte DB. Et les
options de contexte DB seraient outil
relatif ou une voiture
démarrant le contexte DB. Et je vais juste
appeler ça Options. Et puis nous devons laisser la
basse noter qu'elle doit utiliser les mêmes options que la base d'options
représente bien sûr ou les contextes DB
de l'héritage. Cela complète toute
cette hiérarchie
d'injection de dépendances à
laquelle j'aurais fait allusion. Lorsque l'application
démarre, une fois de plus, nous voyons utiliser le
contexte de base de données présent
dans ce fichier et lui donner
ces options
pour le gouverner sans
ce que ce fichier et lui donner
ces options nous venons de faire avec tout ce
que nous
venons de faire. ligne de code. Le contexte DB était
juste assis là à la-la land
nulle part, ce qui vous que c'est
ce conscient du fait que
les options seront transmises. Et aussi possible
avec les contextes DB, qui est la classe de base que nous
a donnée EF Core. Maintenant que nous l'avons fait, essayons encore une fois de la migration
de porte. Et enfin, nous avons une tentative de migration
réussie. Très bien. Nous avons maintenant cette migration
initiale. Enfin, comme vous
obtiendriez un nouveau dossier appelé migrations, que
vous pouvez réduire. Mais chaque fois
que nous effectuons une migration ou chaque fois que nous
modifions la base de données, ajoutons une nouvelle table ou une nouvelle colonne
ou que nous modifions quelque chose, nous devons effectuer une migration. Le fichier de migration
va générer et dire que ce
sont les changements que je vais faire. Ensuite, nous pourrons les exécuter
et cela gardera une histoire. C'est donc un bon moyen de garder un historique de toutes les modifications
apportées à la base de données. Si, à un moment donné, nous effectuons une modification et que ce
n'est pas tout à fait ce que
nous voulions
supprimer la migration, alors vous pouvez littéralement exécuter la
commande supprime la migration, ce qui annulerait le
plus migration récente. Il suffit
d'analyser rapidement ce que dit
ce fichier de migration. Cela dit, eh bien, nous avons une classe appelée générateur de
migration, qui est plutôt initialisée
ou positon. Et puis ce
constructeur nous permet de créer le nom de la table est voitures. N'oubliez pas que quel que soit le
nom
que vous avez mis ici, c'est le nom de
la table qui se trouve. Il s'agit donc de
créer une table avec le nom des voitures et que les
colonnes doivent être ID. Rappelez-vous que j'ai dit qu'
une fois que vous l'appelez, ID saura automatiquement que son identité, sa clé primaire. Toutes
ces contraintes sont déjà placées sur la colonne
ID, soit quatre lignes. Et cela créera l'année
et les colonnes de nom pour nous. C'est dans la fonction. Ensuite, vous avez une fonction ne pas, ce
qui dit en gros, c'est ce que je vais
faire pour annuler cela. Donc, si jamais on fait ACI à
la place de la base de données et que
le soulignement se rend compte, oh snap, ce n'est pas vraiment
ce que je voulais après moi. Je dois changer cela rapidement. Et vous souhaitez
annuler la migration
ainsi que la modification apportée
à la base de données. Parce que ce qui se passe, c'est que si les modifications
déjà appliquées à la base de données pour le
moment, ce fichier
n'est pas une base de données n'existe. Ce n'est qu'un fichier d'
instructions pour voir quand la base de données est
ce que je vais faire. Si vous
avez déjà effectué la migration et que vous l'avez déjà appliquée
à la base de données, vous
devrez annuler la migration avant de pouvoir la
supprimer de l'historique. Cette méthode « ne pas » est celle qui
contient des instructions et disons, eh bien, ce sont les
modifications qui ont été apportées. Eh bien, c'est tout ce que je
vais les défaire. Celle-ci dit donc créer une table
avec toutes ces choses. L'annulation de cela
serait de laisser tomber la table. Au fur et à mesure, nous en
verrons davantage. Ne vous inquiétez pas
trop à ce sujet. Je sais que nous
voulions juste nous assurer que nous devons déjà être excrétés. La prochaine commande
que nous allons
exécuter est la mise à jour de la base de données. Vous pouvez aller de l'avant
et exécuter cela. Et une fois que cela
a été réussi, nous
pourrons vérifier que
notre base de données a été créée. Revenez donc à votre explorateur d'objets SQL
Server. Ensuite, développez, allez dans les bases de données, puis vous verrez
la voiture démarrer BB. Dans cette base de données,
vous verrez les voitures d' une table et
l'historique des migrations EF sous forme de table. Cette table bloque donc toutes
les migrations qui ont été
appliquées à la base de données. Ensuite, nous verrons cette
base de données se remplir fur et à mesure que nous y mettrons de
plus en plus de tables.
8. Cours de base de bases de base de l'échauffement: Très bien, maintenant que nous
avons effectué notre migration, nous avons créé notre base de données. La prochaine
étape logique consisterait à charger l'application pour
interagir avec la base de données. Parce que, eh bien, vous ne
voudriez pas nécessairement envoyer vos utilisateurs dans votre base de données pour pouvoir gérer la voiture. Tout le monde ne connaîtra
pas SQL, pas tout le monde ne
comprendra pas
comment opérer dans cet environnement, c'est pourquoi nous avons des
interfaces utilisateur, nos applications Web,
qui nous permettent d'effectuer
différentes opérations opérations de manière
plus conviviale. Très bien, ce que
nous allons faire,
c'est explorer des
pages de raisons entières qui nous permettent de
générer des interfaces utilisateur pour interagir avec notre base de données. Nous avons déjà commencé à
construire de vieilles pages pour les voitures. Et ce qui se passerait,
c'est que nous avons la page d'index et que
l'index serait généralement la liste des voitures. Et ensuite, vous auriez les autres pages de la foule. Donc C et corrode représente
créer, nos représentations lues. Vous étiez présent à jour, et D représente la suppression brute. Fondamentalement, toutes les applications
que vous
utiliserez jamais sur votre
application mobile dans votre réfrigérateur, quoi qu'il en soit, elles ne
font que des opérations grossières. Ils cherchent à voir
quelque chose. Supprimez-le si vous ne le souhaitez pas, modifiez-le si vous ne l'aimez pas ou si vous allez créer autre chose. Tellement corrodé, c'est le
noeud de chaque application. Ce que nous allons donc
faire, c'est créer les pages de foule pour nos voitures. Parce que nous devons être
en mesure de gérer une flotte, voulons voir toutes les
voitures dans les données BSO sur pour supprimer celles
qui ne sont plus ici. Peut-être que quelqu'un a commis une erreur
typographique, vous voulez la mettre à jour, etc. Je
vais simplement supprimer cette première page d'index
que nous avons créée pour les voitures. Ce que nous allons faire, c'est une nouvelle
page d'index à l'aide d'Entity Framework. Donc, ce que nous pouvons faire, c'est cliquer avec le bouton droit de la souris ou le dossier
voitures pour ajouter une page Razor. Ensuite, lorsque cette boîte de
dialogue apparaît, nous avons trois options. Nous avons les videurs, un pH, que nous avons
déjà examiné. Nous avons la raison pour laquelle pgs
est l'Entity Framework, donc nous utiliserons celui-ci. Cette
boîte de dialogue suivante nous permet donc de dire quel est le
nom du PGY1. Nous remplaçons les bits d'index. Je peux juste lui dire index
alors le modèle demanderait :
Ok, voulez-vous qu'il soit un modèle de
liste, modifiez le modèle. Nous pouvons donc réellement
échafauder une charge de forme ou tout
l'affichage pour
ce que nous voulons. Donc, dans ce cas, nous
voulons la liste car la page d'index,
généralement parlant, contiendra la liste des types de
données ou des données
que vous affichez. Plus la classe de modèles
serait la suivante. Et la classe modale
signifie que le modèle marché ou modèle
de table suis-je censé
utiliser lors de la génération de cette page ? Je peux donc dire « voiture ». Nous le ferons, nous allons le faire
et générer du code afin qu'il puisse afficher les différents
points de données de l'entité automobile. Le contexte de données et,
bien sûr, seraient des contextes RDB, où tous les objets de notre base de données
vont quitter. Quoi qu'il en soit, nous ne voulons pas
avoir à modifier
ces autres paramètres et nous
pouvons aller de l'avant et cliquer sur Ajouter. Sachez que j'ai rencontré cette
erreur que vous n'avez peut-être pas, mais nous allons travailler à
travers ce Arabe car depuis les versions récentes
de Dotnet Core, cette erreur s'est produite pendant la procédure d'échafaudage
et est bon de comprendre au moins un trou
que vous pouvez contourner. C'est parfois très frustrant, mais passons à bout. Il y a donc peu de choses
qui sont recommandées. Premièrement, vous devez et je vais juste
annuler tout ça. La première consiste à aller dans Outils et à
accéder aux packages NuGet, Gestionnaire de paquets, désolé,
puis aux paramètres. Et ensuite, vous allez
effacer tout ce que vous obtenez des caches. Alors allez-y et touchez ça. Ensuite, il faut aller de l'avant et
construire ou nettoyer la solution. Nous allons donc mettre en place
une solution propre. Et cela a amené à le faire. Et puis je vois que
j'ai deux erreurs ici. J'ai une erreur concernant les
versions des paquets. C'est donc généralement
ce qui cause cette erreur. Lorsque les paquets sont les versions des paquets
que vous utilisez peut-être bullet correspondent
nécessairement aux versions recherchées par
l'échafaudage. Je ne sais pas pourquoi. C'est l'une de ces parties les
plus irritantes de ce que Microsoft, l'équipe Microsoft a
fait ces derniers temps. Mais travaillons simplement
à travers l'Âme. Non, mes paquets et moi allons
simplement cliquer sur le fichier du projet et je peux voir que mes paquets sont à 5.09. Donc, ce que je vais faire,
c'est les laisser tomber à 5.08. Donc, dans le fichier CSV je peux simplement
changer les poches. Il s'agit donc d'une autre
façon de modifier la version du
compartiment afin de pouvoir la
modifier ici. Mais si vous
n'êtes pas entièrement sûr des numéros
de version, pas de problème. Nous les
utiliserons pour le prochain. Vous pouvez
donc toujours accéder
au nouveau gestionnaire de package get
in pour ce projet lui-même, regarder les versions installées, puis vous verrez
quelles versions vous disposez. Ensuite, vous pouvez
modifier cette version. Je vais donc simplement déposer la version
2.08, puis cliquer sur Mettre à jour. Vous pouvez donc simplement le faire pour
les packages d'achèvement et de
conception de Dotnet Core pour
Entity Framework. Après avoir effectué
cette opération, je vois que j'ai réussi à
construire. Je vais donc essayer à nouveau
l'échafaudage. Je vais cliquer avec le bouton droit sur les
voitures avec la page Razor
, puis la page en utilisant Entity
Framework et nous remplissons
simplement les mêmes choses
que nous venons de remplir. Donc le modèle d'index est une liste, des classes de
modèles, une voiture,
puis allez-y et appuyez sur Ajouter. Très bien, c'est comme si
c'était un autre domaine. Celui-ci est au moins un
peu plus informatif. Il est dit qu'il y a eu un gain du
générateur de code sélectionné à érafler, installer cette poche particulière. Donc, d'accord, pas de problème. Allons de l'avant et suivez les instructions.
En arrière-plan. Vous pouvez le voir et
vous commencez à installer cette poche. Je vais essayer
ça encore une fois. Cette fois, nous avons décollé. Je ne sais donc pas s'il
s'agissait d'un cycle
de travail distinct. Une fois de plus, cela se produit lorsque certaines versions
sont publiées, mais le mécanisme
sous-jacent de Visual Studio
n'a pas été mis à jour pour
savoir qu'il s'agit la version de la bibliothèque,
elle doit être utilisée. Donc, vous pourriez avoir un peu de
va-et-vient avec ça. Et comme je l'ai dit, il n'
y a pas beaucoup de ressources en ligne pour vous expliquer
exactement ce qu'il faut faire. Ces étapes, généralement parlant, fonctionneront pour vous. Mais ce que nous finissons
avec, c'est un fichier d'index. Le fichier de code. Dans la valeur d'index,
vous voyez que beaucoup de HTML a été généré pour nous. Et dans le fichier de code, vous
verrez qu'une certaine quantité de C-Sharp a également
été créée pour nous. Discutons donc brièvement de
ce qui se passe ici. Dans le fichier d'index. Commençons par un
fichier de code car il est répertorié. Regardez ce que nous
regardons ici, c'est l'injection. Rappelez-vous donc que nous avons fait une forme d'injection de dépendances plus tôt avec un fichier de configuration parce que la configuration a
quelque chose que nous voulions. Nous ne voulions pas créer
une toute nouvelle instance
du fichier de configuration chaque
fois que nous voulions quelque chose. Au lieu de cela, nous
prenons cette copie partagée
enregistrée dans l'application pour être
partagée entre tout le monde. Donc, en substance, lorsque
nous serions passés à notre classe de démarrage et à nos contextes RDB
enregistrés, nous commencions déjà
à le partager entre les applications, ce qui en faisait un candidat pour injection partout où nous le voulons. Il s'agit donc d'injecter
une instance ou d'injecter la version cisaillée
du contexte et initialiser notre propre copie
privée dans ce fichier. C'est une
injection de dépendance en tête-à-tête. Chaque fois que vous voulez faire une injection de dépendances,
cela ressemblera à ceci et vous pouvez injecter
plusieurs choses à volonté. Vous n'êtes donc pas limité à une
seule chose à la fois. Maintenant que nous avons,
dans le contexte, injecté
dans notre index, ce que nous faisons
ici est de créer un objet de liste de type car, n'est
donc qu'une
collection de voitures. Très bien. On devrait vraiment appeler ça des voitures. Je vais juste appeler ces
voitures parce que c'est une liste. Et j'ai tendance à être très
précis avec mon nom, du moins que je le pluralise. Si c'est singulier,
alors c'est singulier. Vous pouvez donc le renommer pour
utiliser les points de contrôle et lui permettre de réfléchir jusqu'à toutes les autres
références pour vous. Et ensuite, ce que nous avons est sur le point d'arriver. Souvenez-vous donc de ce que nous avons
discuté au chargement de la page. On a l'on, on monte, on arrive ici est viré. Une fois que nous accéderons à
cette page
d'index, va automatiquement
appeler cette méthode. Cette méthode configure toutes les données ou tout ce dont
nous avons besoin pour la page, comme nous l'avons fait
avec la configuration et initialisation de nos variables
dans l'exemple précédent. Je dis donc ici que ma liste actuelle de voitures
devrait être égale à. Ensuite, nous allons attendre
les résultats
de l' appel de la table contextuelle des
points cars et d'
obtenir tous les éléments. C'est donc un
Entity Framework classique. Entity Framework nous
donne accès à la base de données via
ce fichier contextuel. Quelles que soient les tables que nous avons
déclarées, car rappelez-vous , les
voitures, nous
y mettons des voitures, c'est la nôtre. C'est tout ce que ça fait. C'est dire contexte,
donne-moi les voitures. Et puis, la façon dont
Entity Framework fonctionne est que c'est ce que nous
appelons une méthode d'exécution. Il voit la liste asynchrone signifie que le fait de me donner tout
dans la table sous forme de liste. Ensuite, nous
stockons cette liste dans notre variable locale ou
propriété appelée voitures. Une fois que tout cela est fait et que
la page a été configurée, passons à
notre code HTML actuel. Donc sur la page HTML réelle, il sait que c'est
une inexpérience, donné que son
index n'a pas nommé trouver toutes ces petites choses
parce que nous appelons l'indice de pH. Nous obtenons le bouton
Créer un nouveau gratuit, n'est-ce pas ? Nous avons donc un lien
vers la création de nouveaux. Bien sûr, cette page n'existe pas
encore, mais c'est très bien. Nous obtenons une table, et cette table comporte un en-tête ou une section de tête
avec les lignes d'en-tête. Nous avons donc l'en-tête du tableau pour l'année à venir,
accordez le nom. Ensuite, nous avons une autre colonne
d'en-tête de table vide. Et puis, pour chaque
article qui est arrivé,
le modèle de voiture à point, voitures
modélisées, c'
est notre liste de voitures. Ensuite, nous l'utilisons
pour chaque boucle pour parcourir chaque article de la liste
des voitures que nous voyons. Donnez-moi un affichage pour l'année, donnez-moi un affichage pour le nom. Et dans cette troisième colonne
qui n'a pas frappé, qui aurait pu
appeler ces actions, peut-être ce qu'
il y a dans cette troisième colonne, donnez-moi trois liens
à modifier, à
supprimer, et un, Il suffit de voir les détails. Et chacun
transmettra cette pièce d'identité. N'oubliez pas que l'ID de clé primaire, c'est ce
qui
identifie de manière unique une colonne de
la base de données ou de ce rôle
plutôt que dans la base de données. Ensuite, nous ne faisons que
lier cela au bouton que lorsque nous cliquons
sur Modifier sur l'un de ces rôles,
nous sachions quel ID
nous allons voir. Jetons un coup d'œil rapidement à ce qui a été généré pour nous. Voici notre pH. Il s'agit de notre nouvelle page. Nous voyons ici que nous avons
quelque chose qui ressemble à une table. Si vous n'êtes pas familier
avec toutes les tables, regardez dans Bootstrap, alors c'est vraiment à quoi elles
vont ressembler. Mais nous avons la table, nous avons la colonne pour vous, nous avons le nom, puis nous avons cette colonne vide qui
aura les liens. Ce que nous n'avons pas, ce sont des données. Oui, nous avons la page sur
laquelle nous avons le bouton Créer un nouveau en
haut de ce
flux d'index afin que nous puissions commencer à
personnaliser cette page en fonction de ce que nous voulons. Au lieu de voir l'indice haut de gamme, on peut dire la liste des voitures de location. C'est essentiellement ce que nous avons eu la dernière fois lorsque nous avons fait cela et voir si nous le voyons se
rafraîchir et changer. Très bien, donc ce que nous n'
avons pas, c'est de créer de nouveaux. Nous ne disposons pas de données
et nous n'avons pas aucune autre page. Lorsque nous cliquons sur Créer un nouveau, il suffit de faire une
boucle car il
n'y a pas de page pour en créer une nouvelle, nous revenons, ce que
nous allons faire c'est créer un
référentiel GitHub pour ce projet. Ensuite, nous pourrons continuer à
développer nos fonctionnalités.
9. Ajouter du projet à GitHub: Très bien les gars, donc nous sommes de
retour et ce que nous allons
faire dans cette leçon,
c'est de rester assis ou de référencer GitHub
pour nos projets. Non, GitHub, nous avons
traversé ça. C'est un outil
ou une plateforme très, très utile pour conserver une copie de notre projet et conserver l'historique
de notre projet. Il nous permet également
de collaborer très facilement avec nos collègues ou amis
sur un projet. Museo Studio, Microsoft a
acheté GitHub il y a des années et depuis l'intégration entre les
outils Microsoft et GitHub, à savoir Visual Studio et vous avez déjà vu Visual Studio Code. Ces intégrations ont vraiment mûri et sont devenues très,
très, très puissantes. Nous allons donc voir comment
envoyer toutes les informations de notre projet à GitHub à l'aide de
Visual Studio
et les garder synchronisées. Il est donc très simple
de le faire. Ce que nous pouvons faire, c'est simplement regarder dans le coin inférieur droit
de notre Visual Studio. Et nous verrons ce
bouton qui indique Ajouter au contrôle source. Alors, allez-y et cliquez dessus
et vous verrez obtenir. Alors, installez-vous automatiquement sur votre machine lorsque Visual Studio a été installé, s'il n'était pas déjà
installé à partir du moment où vous avez effectué cet exercice à
l'aide de Visual Studio Code. Mais non, ils diront créer un référentiel Git et
configurer le référentiel local. Ensuite, il vous permettra également de
créer le
référentiel GitHub dès la sortie de l'emballage. Donc, si vous ne dites pas que vous
n'êtes pas allé de l'avant et connectez-vous, vous serez probablement
invité à vous connecter avec vos informations d'identification GitHub à
ce stade. Mais à partir de là, vous pouvez indiquer que vous voulez un référentiel privé et
c'est très bien pour l'instant. Vous pouvez le laisser comme privé
ou réalisé que lorsque vous décochez cela moins qu'ils ne
corrigent l'acheteur en vrac, non, mais cela ne le créerait pas sur GitHub si vous ne le
rendiez pas privé, pas tout à fait sûr pourquoi, mais vous pouvez toujours
revenir en arrière et
le changer en public si vous le souhaitez. Nous le laissons privé. Nous n'avons pas besoin d'entrer une
description ou quoi que ce soit d'autre. Et ils nous disent quel sera
le tweet d'URL. Vous pouvez donc cliquer sur Créer et pousser et
laisser quelques instants. Et je n'ai pas compris
clairement que c'était fini. Mais si je regarde dans le coin
inférieur droit, je vois que
le bouton pour dire ajouter n'est plus là
au lieu d'un chemin centimètre, il me dit que j'
ai une branche principale. Ce sera ce que
nous appelons la télécommande. N'oubliez pas que nous avions
configuré cette télécommande, qui possède essentiellement ce lien
vers le référentiel distant. Il contient
des modifications et des validations en attente qui peuvent être
diffusées dans les ressources. Vous verrez que tous les fichiers
du concentrateur null de
l'Explorateur de solutions, les petits cadenas, ces lots de boutons indiquent que la version qui
se trouve sur votre ordinateur inchangée depuis la
dernière mise à jour du serveur. Donc, si j'y vais et que des ajustements et que
je ferai un léger ajustement
à ce fichier. Ensuite, vous verrez qu'il se
débarrasse de cette tique rouge. Cela signifie que oui, ce fichier
a été modifié et nous avons un autre panneau
appelé « bonnes modifications ». Si ce n'est pas là où il
se trouve sur mon écran pour vous, vous pouvez toujours accéder à Affichage et
vous verrez de bons changements. Très bien, donc une fois que
vous ouvrez obtenir des modifications, il vous montrera
les fichiers qui sont modifiés et en attente
d'être validés. Vous avez donc votre message de validation, donc il est dit fichier d'index
modifié. Le moyen le plus simple de le faire
serait de
tout engager et de voir ce que cela
fait est de pousser et de tirer. Il enverra vos
modifications et transmettra
tous les nouveaux changements qui
pourraient exister ? Non. Il existe des situations
où vous risquez d'être en conflit avec
votre collègue, qui signifie que vous avez modifié
cette page d'index. Il a également apporté une
modification à cette page d'index. Et puis l'un d'entre vous s'est enregistré
avant l'autre. Ainsi, lorsque vous vérifiez votre version modifiée
de l'ancienne version, GitHub se rend compte
que la version qu'elle possède est différente de la dernière
version que vous avez fournie. Et alors, cela
provoquerait un conflit. À ce stade, vous
devrez gérer
et résoudre les conflits. Nous pourrons en discuter plus tard
au fur et à mesure qu'un projet se développe. Mais rétinienne ceci, il
suffit de rester
assez simple Pour savoir que
nous pouvons créer ou référencer les
modifications, synchroniser et quand nous faisons des engagements
et vous verrez qu'il le validera
localement et ensuite synchronisez les commits
locaux avec commits GitHub, réduisant
automatiquement tout ce que vous n'avez
pas actuellement dans GitHub. Une vraie entrée. C'est à quel point il est
facile de coder en groupe. Chacun de vous peut donc facilement se connecter à ce
projet sur GitHub. Je vais juste vous montrer
à travers le côlon Maya. Voici donc le Carbo
King Up qui
vient d'être créé il y a une minute. Il y a le poulet que je
viens de modifier le fichier d'index. C'est vrai ? Personne n'est privé et deux d'entre eux sont la seule personne. Donc, si je voulais bien le garder privé
mais le partager,
alors c' est
aussi simple que d'accéder aux paramètres,
allez dans Gérer l'accès. Ils peuvent vous demander de
confirmer qui vous êtes. Et après avoir
confirmé qui vous êtes, vous pouvez inviter
des collaborateurs. Inviter des collaborateurs
est aussi simple que de saisir le nom de la personne. J'en ai donc un autre, j'essaie de défendre
mon autre YouTube, un cône pour pouvoir simplement
démontrer à quoi ça ressemble. Mais vous pouvez
simplement chercher le nom d'utilisateur de cet art éclatant. Je faisais juste affaire à des noms d'utilisateur
aléatoires. Il peut simplement trouver le
nom d'utilisateur d'une autre personne, allez-y et ajoutez. Ensuite, ils
accepteraient l'invitation, puis ils
pourraient aussi pousser et retirer du projet dans l'ordre, disons la nouvelle
personne de l'équipe, ou même si vous avez perdu votre code, Voyons voir, votre machine s'est écrasée. J'ai besoin de perdre leur projet local et vous devez le
récupérer depuis GitHub. La même procédure que celle d'une personne
qui vient d'être ajoutée
au projet et qui a besoin d'une copie
locale pour commencer à travailler. Tout ce que vous avez
à faire, c'est d'aller au code. Ensuite, vous verrez
ouvert avec Visual Studio. Une fois cela fait, Visual Studio
s' ouvre
sur votre machine. Indiquez ensuite que vous pouvez
cloner à partir du référentiel. Il s'agit donc d'un emplacement de référentiel qui est l'URL de GitHub Shore. C'est votre passé local. Maintenant, il apparaît en rouge parce que j'ai déjà ce chemin local. C'est un projet sur lequel
nous travaillons. Non. Une fois de plus, si c'
était notre première machine, vous n'
auriez pas ce problème. Ou si c'était la première fois
que vous recevez ce projet, vous n'auriez pas ce
problème avec le chemin. Même si vous
possédez déjà le projet, vous
suffit de changer aussi vite
que possible et il s'afficherait
dans un autre dossier si
vous en vouliez vraiment une copie. Une fois que vous avez indiqué où vous
souhaitez cloner localement, il suffit de cliquer sur Cloner entre
Visual Studio et GitHub. Tous les fichiers de projet qui ont été téléchargés
à jour
seront téléchargés sur
votre machine et synchronisés, puis
vous pourrez commencer à travailler. C'est donc à quel point il est facile pour les équipes de commencer à collaborer. Si vous voulez rendre l'
ensemble du projet public. Serrano est privé, ce
qui signifie que si cette URL et moi avons essayé de développer le
costume et je vais juste ouvrir une nouvelle fenêtre de navigation privée. Si j'essayais de faire pousser un costume,
j'arriverai à un 404. Il n'existe techniquement pas par rapport à l'un de mes projets
publics. Permettez-moi d'en trouver un
que je sais qu'il est public. Si vous obtiendrez cette
URL et que vous la parcouriez,
cela indiquerait que n'importe qui peut accéder aux
référentiels publics sur GitHub. Mais une fois que c'est
privé, personne ne peut, lorsque vous travaillez
sur vos projets sérieux , il ne veut pas partager
votre propriété intellectuelle avec Sharp, la rendre privée. Mais dans le vrai sens de l' open source, de la
collaboration et du cisaillement, vous voudrez probablement avoir quelques projets ouverts
, car cela peut également servir portefeuille pour
vos prétendants ou vos futurs employeurs Quand
ils voulaient voir quels types de projets avez-vous
réalisés et avoir une idée globale de
vos compétences. Dans l'ensemble, GitHub est
un outil merveilleux pour rencontrer de nouvelles personnes, vous savez, en regardant ce que les
autres développeurs pourraient faire. Vous pouvez suivre les gens. Les gens peuvent
vous suivre pendant que vous publiez. Les gens peuvent démarrer
vos référentiels ou faire leurs propres copies de
votre code, car peut-être que vous faites quelque chose
que quelqu'un d'autre est intéressé à faire et que ce que vous faites est à
moitié fait, peut aidez-les. Dans le vrai sens, une fois encore, on saute sur la
communauté open source pour collaborer. C'est ce que GitHub
apporte à la table. Allez-y et ce que nous allons faire c'est
faire un
short ou un cône. Ainsi, chaque fois que nous aurons une
fonctionnalité, nous synchroniserons avec le référentiel,
car une fois de plus, il nous donnera l'
historique de tout. Donc, si nous faisons une erreur et
que quelque chose cesse de fonctionner, nous pouvons toujours revenir
à la version précédente. Ce que vous ne voulez pas
faire, c'est laisser trop de changements entre les versions que
vous enregistrez.
10. Ajouter une page de Razor: Salut les gars, bienvenue. Maintenant que nous avons une idée
de la façon dont nous pouvons générer le code pour voir les voitures
ou n'importe quel détail dans n'importe quel tableau. Ce que nous pouvons
faire, c'est continuer sur cette ligne et pêcher toutes les activités
de la foule. Alors corrodez encore une fois
depuis que nous créons, lisons, mettons à jour et supprimons. Nous avons donc actuellement l'une des options rouges sous
la
forme de l'index, mais nous n'avons pas de données dans la
base de données. Nous avons deux options. Nous pourrions entrer dans la base de données, mettre dans le dossier,
mais bien sûr, en réalisant ou cela
ne serait pas le cas, cela ne
serait pas encourageant
nos utilisateurs à le faire. Au lieu de cela, ce que
nous allons faire c'est le continent de se battre
avec toutes les pages. Et ensuite la page Créer, qui permettrait de clore ceux de
la base de données, permet d'utiliser l'interface utilisateur dans nos données et de la rendre
visible à partir de l'index. De la même manière que nous avons
généré le fichier d'index. Nous allons juste faire un
clic droit sur les voitures, ajouter la page Razor. Et je vais faire une autre page de résultats
avec Entity Framework. Maintenant, une fois de plus, vous pouviez tout
simplement éradiquer tout cela, mais je voulais
les faire un par un pour que nous
puissions évaluer les différents morceaux de code et les tenir tous ensemble pour nous donner la fonctionnalité
complète. Donc, la page Razor en utilisant
Entity Framework, je suis allé ajouter celui-là. Et cette fois, je
vais faire un Create. Je nomme la page créer. Le modèle reste qui le
crée nous donnera un formulaire ou une
classe de modèle sera notre voiture. Et nous pouvons laisser le contexte de
données stress, aller de l'avant et appuyer sur Ajouter. Et cela génère nos
bagarres cette page pour moi. Donc je reçois le
fonds de pitch ainsi que le fichier de code auquel nous sommes
habitués maintenant, rappelez-vous
simplement que si
vous avez des erreurs à ce
sujet et que vous ne
pouvez pas échafauder, nous venons de passer par cette
activité avec le index. Ainsi, entre les leçons, vous avez peut-être été
enclin à mettre à jour vos paquets NuGet et
cela entraînerait probablement une certaine déconnexion avec une bagarre plus ancienne. Donc, si vous obtenez cette erreur, revenez
simplement à la version précédente ou une version avant
celle à votre valeur nulle. Et réessayez. Et au fur et à mesure que vous faites glisser et si vous
continuez à obtenir la zone, continuez
simplement à écraser les
échafaudages ou à laisser tomber la version du paquet
NuGet et d'essayer de se battre. Nous allons maintenant évaluer ce que nous avons
obtenu lors de cette bagarre, l'activité de
la page Créer. Nous avons notre code derrière le fichier, qui était toujours une
classe héritée, héritant du modèle Page. Et ensuite, nos
contextes sont injectés. Ensuite, à l'arrivée, c'est juste
dire le pH de retour. En d'autres termes, nous n'avons
rien à
charger pour créer,
donc nous n'avons pas besoin charger pour créer, d'aller et Fitch pour afficher
le formulaire parce qu'ils vont
simplement afficher
un formulaire vide à l'utilisateur pour qu'il puisse
réellement créer un enregistrement. Donc le début est vide, il n'y a rien à
revenir ici, c'est très bien. Nous avons également cette
propriété appelée cartes. Nous avons donc une voiture publique et c'est
un objet du type de voiture, puis nous
achetons une propriété. Ainsi, la propriété bancaire
ici indique essentiellement la page Razor que sur le formulaire, quelle que soit l'entrée donnée pour n'importe quelle propriété qui se trouve
à l'intérieur de cette classe, elle devrait la regarder. Une fois qu'il aura été soumis, il arrivera
à ce post. Tout ce qui est désossé, il sera regardé de
sorte que lorsque nous parviendrons à la publication, il va réellement
gratter toutes ces données, faisant correspondre les données des
propriétés de la voiture du formulaire. Et pour que nous puissions
le traiter par la poste. Ici, nous vérifions d'abord si
le modèle est valide. La validité du modèle peut être un certain nombre de choses basées sur les données
que nous demandons. Ainsi, dans le cas de la
création d'une voiture, ce serait absurde à un bas, une voiture à entrer sans
un an et portant le nom OTA. Ou du moins peut-être que le nom
est la chose la plus importante. L'oreille peut être facultative. Nous
voudrions donc nous
assurer qu'au moins le nom est présent avant essayer d'envoyer quoi que ce soit
sur deux éléments de données. Donc, si
l'état des modèles est valide ici, cela
vérifie-t-il que nous voyons quelles sont les règles de
validation ? ils émettent sinon, il suffit de recharger la page. Je vais vous montrer
dans quelques secondes. Hold qui
se traduira par chacun montrant ce qui ne
va pas avec elle. Mais si elle n'est pas valide, suffit de recharger la page. Sinon, ce qui
se passera, c'est qu'il
ira dans le contexte de la base de données, se rendra à l'écurie de la voiture et
ajoutera le nouvel objet de la voiture. Voyez que c'est les
mêmes objets que ceux que nous avons dit Ben propriété quatre. Et ensuite,
il sauvegardera les modifications. C'est donc tout ce qui fonctionne Entity
Framework. Il en dit un, me disant quelle table et dites-moi
ce que vous vouliez faire. Dans ce cas, nous voulions ajouter et ajouter une voiture. Et puis, une fois que nous
augmentons les données, c'est-à-dire où ajouter quelque chose, supprimer quelque chose,
mettre à jour quelque chose. Une fois que nous avons modifié
quelque chose concernant les données, nous devons appeler les modifications de sauvegarde. Maintenant, vous remarquerez l'attente. Lorsque je double-clique, j'attends, vous verrez qu'il y a cet
autre titre appelé évier. Donc, dans la programmation asynchrone, vous allez voir une
grande partie de cette tâche asynchrone hors du type que j'entraîne
réellement. Remarquez que l'apparition
n'est que le résultat de l'oxygène. Il s'agit de résultats d'actions de tâches car il s'agit d'une fonction
asynchrone. La raison pour laquelle il est asynchrone
est qu'il effectue un
appel de fonction asynchrone au contexte. Il a donc une version
non asynchrone. Il suffit de sauvegarder les modifications. Mais
cela nous obligerait à apporter quelques changements à notre
méthode et à toutes ces choses. Mais s'il
a généré cela pour vous, il va toujours
essayer de vous donner code
le plus efficace en
fonction de ce dont il est capable. C'est pourquoi nous
obtenons les versions asynchrones de ces méthodes après avoir
enregistré les modifications et
que tout va bien, puis nous redirigeons vers
l'index de page même le
code généré sait que devrait chercher
une page appelée Index. Cette page d'index se trouverait ici au
même niveau que Create. Une fois que tout est terminé, il redirigera simplement
vers la liste et vous
verrez un enregistrement que vous venez de créer dans cette liste. Examinons maintenant rapidement le fichier HTML qui
a été généré pour nous. Ce n'est pas beaucoup, c'est un petit formulaire car
la table n'a pas beaucoup d'enregistrements pour
regretter le nombre de champs à remplir. Ce que nous obtenons, nous en avons
un, nous prenons la voiture. Si nous pouvions simplement redessiner
essentiellement la voiture. C'est notre étiquette H1, retirez ce H quatre. Et puis nous avons
quelques divs Bootstrap. Nous avons une div avec une
classe appelée règle, puis nous avons
une classe appelée appel MD4. Cela signifie donc qu'il occupe
quatre colonnes dans la règle. Dans Bootstrap, le
système de grille est tel que vous pouvez créer une règle,
puis vous pouvez avoir col, tiret un nombre ce que
vous avez jusqu'à 12. Vous pouvez donc avoir autant de
divs d'appel au lieu d'une rangée jusqu'à 12. Vous pourriez donc en avoir
12 ou trois, quatre ou quatre trois. Très bien, vous pouvez mélanger autant de choses et ne pas choisir
d'en avoir, n'est-ce pas. Donc, si je voulais
former un district juste face de ce que j'ai vu la section HTML de ce cours lorsque nous
venons de créer le formulaire, nous lui avons donné toutes les balises de
formulaire, etc. étirés aussi
loin que possible, alors vous n'auriez pas
à spécifier de col md. Vous pouvez donc expérimenter cela. Examinez la documentation pour les différentes
mesures de colonnes, et nous pouvons
expérimenter cela et voir à
quoi cela ressemble. Mais le plus important
est notre forme. Ensuite, dans le formulaire, nous
avons cette div qui indique résumé de validation du tiret
AASB sur le modèle uniquement. Il dispose également d'un autre
mode qui voit tout. Très bien, donc parfois j'ai
tendance à rencontrer tout ça. Parfois, vous n'aimez que le modèle. C'est très bien. Je veux dire, vous verrez les avantages
de l'un et non de l'autre, bien qu'il soit plus global. Je vous
recommande donc de
tout utiliser quand vous en avez deux. Ensuite, nous lui donnons une classe
avec un danger de tics. Cette section de la page est
en fait remplie toutes les erreurs de validation présentes
lorsque nous avons dit
que si l'
état du modèle n'est pas valide, renvoyez le pH, ce
qui est automatique. Donc, l'état du modèle est en train de
camionner pour voir, eh bien, c'est tout le modèle
et c'est en train d'être désossé. Lorsque les données sont saisies
et sur Post, toutes
les données
saisies ici sont envoyées via le formulaire. Vous verrez que vous
avez deux entrées. Un pour l'année de mon point de voiture. Je ne veux pas mettre de nom de point que nous obtenions l'étiquette,
obtiendrons l'entrée, puis nous obtenons le
filé avec ce message de validation intégré. Ainsi, à deux endroits, les messages de
validation apparaîtront sous l'entrée et en haut
du pH dans un résumé de génération. Chaque fois qu'
un chèque est publié, était-il valide ? Si ce n'est pas le cas, nous revenons à la page
lorsqu'elle recharge cette page. Entre le résumé de la validation et ces durées de validation, nous verrons tous les
textes qui
indiqueront pourquoi quelque chose n'
a pas été voté. Ce que je vais faire, c'est retourner ça parce que
c'est notre ferme. Il a été généré pour nous ce que
nous pouvions le changer. Je suis donc allé mettre ce
groupe de formulaires pour un nom au-dessus de l'année. Ce truc qui coule plus. C'est mettre le nom de la voiture
et mettre l'année. C'est facultatif à ce stade. Et puis nous avons le bouton
Créer en dessous avec la classe BTN
sera dix tirets principaux. Et vous pouvez même étendre
ce sens qu'il bloque btn, il s'étend
sur toute la page. Ensuite, nous avons notre liste de
retour à la liste. Donc, si la personne
est allée aussi loin et s'
est initiée , je ne veux plus
créer la voiture. Ils peuvent toujours
revenir à la liste, revenir à l'index. En dessous de tout cela se trouve
une section pour les scripts. Et ce qui se passe, c'est que tout
ce flux de validation
que je viens de décrire, c'est vraiment une
combinaison de nous ajoutant règles de
validation et je suis sur le point de vous montrer
comment cela fonctionne. Et certains partiels ou désolés, ce sont des
scripts qui sont rendus sur la page. Ce peu de code, c'est un rendu
asynchrone partiel pour les scripts de validation. Si nous regardons dans le dossier partagé, vous verrez que les scripts de
validation de soulignement
partiels exacts sont partiels. C'est là. Et si vous regardez cette partie, vous verrez qu'il y a deux balises de script pour
jQuery dot validate. Donc pour les bibliothèques jQuery, que nous avons vu dans l'ordre des racines www. J'essaie juste de vous montrer comment tout est
interconnecté ici. Nous avons le jQuery validate, comment le jQuery
valide sur gênant. Nous avons donc ceux-ci, nous venons de créer une partie ou
le framework a généré cette partielle pour nous qui
a automatiquement des références à cela. À tout moment, il
générera un formulaire pour vous ou même si vous créez
votre propre formulaire. Plus tard, nous examinerons comment créer
votre propre batterie de serveurs
à partir de
zéro ou votre propre page, puis vous pourrez
simplement utiliser ce peu de code pour intégrer ce type
de processus
de validation sur toutes les parties. lorsque
nous voulions lui dire quels champs sont valides ou désolés, devraient être
validés et par rapport aux règles que nous devons passer au modèle actuel
utilisé ou
à l'entité réelle. Mettre
ces attributs en annotations de données est aussi simple que d'aller au-dessus du champ auquel
la règle doit être appliquée. Et puis en utilisant des crochets et nous verrons nécessaire. C'est donc notre première
règle qui dit
que les données à tout moment
sont censées être saisies sur n'importe quelle page
modélisée sur voiture ou n'importe quel formulaire modélisé hors voiture. Le champ de nom est obligatoire. C'est l'étape numéro un. Quelles autres règles pourrions-nous avoir ? Nous voudrions peut-être aussi dire
que la longueur de la chaîne devrait être, puis on peut voir une longueur
maximale de 50. Par conséquent, aucun nom de voiture ne doit dépasser 50. Permettez-moi de mettre ça à 150. Et puis on pourrait dire que s'
il n'est pas dépassé, je veux un
message d'erreur de mon nom. Son nom est trop long. Quelque chose que nous pouvons également
définir une longueur minimale afin la personne ne
puisse entrer quoi que ce soit avec un personnage, vous
savez, des choses comme ça. Vous pouvez donc simplement les
enfiler
juste au-dessus du champ. Maintenant, placez ces règles
contre l'entité débitrice, car il s'agit de l'
entité réelle qui est utilisée pour générer la table comme nous l'avons
vu lorsque nous avons ajouté un ensemble de bases de données. Nous avons ajouté notre migration. Quand je les mettrai ici, je vais en fait
affecter la base de données. Donc, si je génère une autre
migration à ce stade, et je vais juste
en générer une. J'ai fait des
règles de validation, appuyez sur Entrée. Et lorsque vous faites cela, n'
oubliez pas de modifier le projet
par défaut par le projet de données. Mais une fois cela fait, vous pouvez voir ici
que les marchandises sont une colonne d'
autel un peu de syntaxe. Ici, il s'agit de modifier
la colonne avec le nom, le
nom, car c'est
celui que nous
venons de définir les règles ci-dessus. Alors le type est toujours, le type est int varchar 150. Donc, avant qu'il ne soit
dans les caractères var,
notez que, bien qu'il s'agisse d'une limite de longueur de
chaîne, il va
changer le type de données dans la base de données pour savoir que
même à ce moment-là, elle ne peut pas
stocker plus de 150. C'est bon ? Non, ce n'est plus inaudible car maintenant nous l'avons rendu nécessaire. Avant que ce ne soit vrai,
ce n'était pas un bleu. Nous aurions pu lever le MTU. La base de données
n'aurait pas de problème. La base de données elle-même la refuse
activement. S'il est nul, si rien n'est fourni, il vous donnera une
chaîne vide comme valeur par défaut, mais elle ne peut pas être nulle. Cependant, du côté client, il n'accepterait même pas la chaîne vide
car elle est requise. Donc, lorsque nous allons tester ou
former sur la page d'index, je vais cliquer sur Créer un nouveau,
puis nous aurons nos formulaires. Ainsi, à cause de l'appel MD4, vous voyez qu'il ne
s'étend que jusqu'à quatre. Ce que nous pouvons faire,
il suffit d'explorer cela. Je vais juste inspecter les éléments que nous pouvons
jouer avec cette largeur. Si je faisais ça appelé
MDA huit par exemple, vous étireriez
jusqu'à huit fois. Alors, d'où voyons-nous le DSE ? Les lignes s'étendant
de gauche à droite, elles sont aussi larges que
les 12 colonnes. Je sais donc qu'il va
prendre huit des 12. Si je ne spécifiais pas de largeur, c'est à quoi ça
ressemblerait. Ce serait un peu minuscule. Donc, si nous voulions qu'il se
prolonge complètement , nous
pourrions simplement dire col md. Donc je vais le faire ici,
c'est égal à des appels. Il s'agit donc d'une façon agréable et
transparente de tester à quoi il ressemblerait avant de
rencontrer le changement de code. Donc nulle part voir
appelés tableaux de bord. Vous pouvez donc dire col
dash AMD, T12, ce qui signifie sur un écran de
taille moyenne, taille de point
T corp. Ou si vous voulez simplement
qu'il soit universel sur tous les écrans et qu'il prenne cette taille de
mode ou non mathspace, vous pouvez simplement dire que col dash T2
est appelé tiret le numéro. Nous voyons donc qu'il s'
étend de gauche à
droite le plus loin possible. Et puis nous avons
notre bouton Créer, qui est btn block. Si j'essayais juste de
créer ce point. On y va. Nous voyons
notre validation fonctionner. Donc, nulle part, ce résumé
de
validation en haut
, puis nous recevons les messages de validation ci-dessous. Non, nous n'avons pas dit au champ de l'année que cela était
requis en fonction de nos règles. Ce que je vais expliquer pourquoi
vous allez voir ça. Il est donc bon de
comprendre ces nuances avec tous les plats valides et quels champs sont automatiquement
validés, pour ainsi dire. Parce que year est un entier
et non un entier nullable. Par défaut, lorsque vous
voyez int dans C-Sharp, cela signifie qu'il ne
peut jamais être nul. C'est bon ? Donc, nano signifie vide. Mais un int
ne peut jamais être vide. Un int est toujours égal
à 0 par défaut. Cela signifie donc que lorsque nous avons soumis juste ou que j'ai
essayé d'en soumettre,
s' il est modeste, c'est valable. Il n'était pas valide car l'entier n'a pas
obtenu de valeur du tout. Il n'a même pas obtenu le 0. En ce qui concerne,
il n'est pas valide. Donc, si j'avais mis un 0 là, le
message de validation disparaît. Si j'ai essayé de créer, il est satisfait que 0 n'
est pas une année valide pour nous. Zérose une valeur valide par rapport
à NULL pour un entier. J'essaie juste d'expliquer tous les différents types de
données peuvent avoir leur propre type de validation
en attente. Ils travaillent à C-Sharp. Mais en fin de compte, si je
n'y mets rien, ça va automatiquement
dire , eh bien, c'est nécessaire. Si j'essayais de créer, ça
n'ira plus loin. Et si vous voulez plus de preuves, je vais juste placer
nos points d'arrêt juste à cette ligne où il est
vérifié, est-ce valide ? Nous cliquons sur Créer, il va
atteindre ce point d'arrêt. Eh bien, ça ne va pas atteindre le point d'arrêt, car la validation surveille activement. Laissez-moi donc aller de l'avant
et créer une voiture. C'est en fait dans mon ancienne voiture. Magnifique GAR,
allez-y et appuyez sur Créer. Et comme il n'y a pas encore d'erreurs de
validation active, ce que nous avons, c'est que cette vérification
pour voir l'état du modèle est valide. Il est valide. Cela signifie que s'il n'est pas
valide, retournez à payé. Comme il est valide, il va aller de l'avant et l'
ajouter à la base de données. Je vais juste
supprimer ce point d'arrêt, appuyer sur F5 pour le laisser continuer. Et puis cela
redirige vers la page d'index, qui exécute ensuite la
requête pour voir et me
faire entrer toutes les voitures dans la
base de données et les afficher. C'est ainsi que tout
est interconnecté. Je vais donc essayer
de créer une autre création. Et je vais juste
mettre ce point d'arrêt, prendre et voir
ce qui se passe. Nous allons cliquer sur
Créer et vous verrez qu'il n'atteint même pas le point d'arrêt car du côté client,
il refuse activement car les
règles de validation sont en fait configurées pour le des champs basés
sur les règles que nous sommes assis. Si nous surlignons ou inspectons
la zone de texte pour le nom, nous voyons ici que les
données Val sont égales à true. Tous ces éléments sont donc
générés par JavaScript. Ainsi, entre nos règles que
nous avons configurées dans C-Sharp et les bibliothèques JavaScript
sur le client, tous ces attributs ont
été ajoutés à la zone de texte. Data Val est donc
vrai signifie que je suis censé effectuer la
validation des données sur ce champ. Les données de longueur. Cela signifie que l'erreur
basée sur la longueur est le message d'erreur
que nous avions saisi. Le maximum est de 150. Donc, toutes les petites
règles que nous avions mises en place, vous les verrez être appliquées dans les forums
d'attributs ici. Et nous n'avions pas
ce code supplémentaire. Et si vous
regardez notre fichier HTML, c'est toujours le même ischium. Nous ne l'avons pas tapé et il n'a pas modifié le fichier lui-même. Tout cela se fait à
la volée chaque fois que la
page Web est chargée. Ce que nous avons fait, tout
ce que nous allons
faire, c'est simplement mettre à jour la base de données car elle vient de
créer une nouvelle migration. Et c'est quelque chose
que nous allons
faire beaucoup chaque fois que vous
apporterez une modification à l'une
des classes d'entités, la
première, vous effectuez une migration où elle documentera le
changement qui doit se produire. Et si vous supprimez
la migration, quelle triche et qui doit
être annulée ou modifiée. Et après avoir effectué
la migration, nous revenons en arrière et nous
disons mettre à jour la base de données. Vous pouvez donc utiliser l'onglet. Si vous tapez certains d'entre
vous, appuyez sur Tab pour terminer le reste de la base de
données de mise à jour. Et si tout va bien,
vous verrez que c'est fini. Maintenant, il y a des moments où
vous risquez d'avoir des erreurs. Peut-être que certaines des
modifications que vous souhaitez appliquer peuvent entrer en conflit avec certaines données déjà présentes. Cela arrive parfois,
mais comme je l'ai dit
, chaque fois que ces erreurs surviennent, nous
travaillerons ensemble. Vous pouvez donc avoir une bonne idée de la façon de résoudre un
problème. Est-ce que ça devrait arriver ? Lorsque nous
reviendrons, nous
continuerons notre aventure de code. Jusqu'à présent, nous avons le Create, nous avons le r, donc nous avons le c, nous avons le R sous la
forme de cette page d'index. Ensuite, nous pourrons
procéder à la modification suivante.
11. Ajouter une page de rasage à jour: Bon, bienvenue aux gars de retour. Nous sommes maintenant sur
notre nouvelle activité, qui consiste à
configurer la page d'édition. Les modifications seraient donc la mise à jour brute de
l'ONU. Au moment où nous allons
modifier quelque chose, vous effectuez des
mises à jour des données existantes. Ainsi, continuer dans
la même veine d'échafaudage
sera à juste titre les voitures, les voitures, voitures, aller de l'avant et chauffer. Il existe une page, une page
utilisant Entity Framework. Et ensuite,
nous l'appellerons modifier. Je justifie l'utilisation de
ces noms de page. Pourquoi j'ai dit des modifications au lieu de la mise à jour ou j'ai dit index
au lieu de liste. Vous remarquerez que
dans la page d'index, il s'agit des noms de page. Cela étant dit,
si ce
n'est pas
le nom de page que vous voulez, vous pouvez toujours les modifier. Donc, si je voulais que cela dise
mettre à jour au lieu de modifier,
alors ce sera très bien. Je vais appeler ça des mises à jour. Je suis allé changer ce modèle de Create pour modifier afin
que nous obtenions ce formulaire de modification et vous
verrez la différence entre
les modèles de création et de modification. La classe modale est toujours une voiture, le contexte de
données signifie la même publicité. Ensuite, nous obtenons nos deux cinquièmes. Nous recevons donc des mises à jour, CSEA, émail, et le fichier de modèle derrière,
neige, c' est une mise à jour. Mais si je retourne
à la page d'index, le code qui a été
généré
cherche à voir que la page
ASP va vouloir voir
est modifiée et non mise à jour. Bon, très bien. Je peux juste le rendre null Chaque page a
hâte de mettre à jour. Je peux également modifier
le texte si je le souhaite, car il ne s'agit
que d'une balise d'ancrage. Que faut-il que
je veuille afficher ? Je peux dire que je veux afficher la mise
à jour, mais je la laisserai lors de la modification
car la mise à jour n'est pas aussi conviviale ou que les utilisateurs ne se rapportent pas vraiment au mot
mise à jour comme ils le feraient. Ce que vous présentez aux
utilisateurs. C'est toujours important. Mais vous pouvez avoir un peu de
marge de manœuvre avec vos noms de pitch. Mais c'est tout ce que je voulais démontrer en ne modifiant pas Nimitz,
en nommant, en mettant à jour. Vous voulez être prudent si
vous allez à l'encontre de la norme, alors vous devez vous
rencontrer de plus en plus pour faciliter votre
mise en œuvre. Cependant, sinon, si
vous respectez les normes, votre besoin de personnalisation
est considérablement réduit. Revenons
à notre fichier de code pour
le fichier HTML CSS de mise à jour. C'est donc à peu près la
même chose que l'
injection du contexte de
base de données, nous avons le même type
de propriété de bande, propriété que nous avons
vu dans Create. Nous allons donc
avoir le premier. Nous allons avoir des champs
pour la voiture sur le forum. Nous devions surveiller
les changements apportés aux valeurs des propriétés
afin de pouvoir
les traiter à la poste. Remarquez, cependant,
que sont sur GitHub a beaucoup plus d'action en cours, alors nous serons
habitués, et passons à travers
ce qui se passe ici. Premièrement, vous remarquerez
que c'est asynchrone, donc ils l'ont fait fonctionner cette fois, et il a un
paramètre pour int id. Notez
maintenant que cet int a
un point d'interrogation à côté. Auparavant, j'
aurais mentionné ins
néolibéraux contre int. Par conséquent, int signifie qu'
il n'est pas facultatif, il doit être au moins 0. Cependant, il
arrive parfois que vous ayez besoin d'une valeur nulle dans la variable
censée être un int. Dans cette situation, ils disent
essentiellement que quelqu'un peut essayer de naviguer sur la
page de mise à jour sans fournir d'identifiant. Très bien, donc cela signifie
que lorsqu'il frappe ici, cette valeur d'ID sera nulle. La première chose à faire
est de vérifier si la valeur de l'id est nulle, puis de retourner introuvable car
je ne trouve rien. Non, ça ne veut rien dire. Et si vous
me dites que vous voulez modifier un enregistrement sans identifiant. Et nous avons déjà
passé en attente cet
identifiant unique
dans la base de données ? C'est une clé primaire. C'est ce qu'est la pièce d'identité. Si vous me dites que vous
souhaitez modifier une icône d'enregistrement, passez à l'idée de l'
enregistrement que je vais vous
dire s' il ne s'agit pas téléphone et que je ne peux pas le trouver correctement. Donc chaque fois que nous obtenons ces
404 pages sur n'importe quel site Web, essentiellement ce qu'ils font, ils reviennent, pas téléphonés. Très bien. Si aucune pièce d'identité n'est fournie
, je ne trouve rien. C'est à peu près ce que
nous voyons pour l'utilisateur. Toutefois, si cela va au-delà de
cela, nous pouvons supposer que
l'ID a une valeur. Nous essayons donc de trouver cette
valeur dans la base de données. C'est essentiellement dire, aller dans le contexte, aller à l'écurie de la voiture. Alors allez plus tard, désolée, allez à l'écurie de la voiture et obtenez le premier enregistrement ou
l'
enregistrement par défaut où l'ID correspond à la valeur
qui arrive. C'est ce que nous appelons
une expression lambda. Très bien, alors mettez-en trop. M aurait pu être n'importe quel Tolkien, ça aurait pu être le
mot record égal w, un chiot de mot W2 égal. M n'est pas, n'est rien de
tout à fait spécial. Cependant, m
suivi de cette flèche, que je vais juste
appeler la flèche Lambda, fait une expression lambda, ce qui signifie que vous définissez
essentiellement des fonctions comme des capacités à l'intérieur
d'une. déclaration. Très bien, donc c'est
une expression lambda. J'aurais donc pu utiliser un élixir dégénéré, c'est très bien. Mais j'aurais pu utiliser
n'importe quelle lettre, n'importe quel mot, n'importe quel Tolkien et
dire flèche de Tolkien. Ensuite, le Tolkien représente
essentiellement tous les enregistrements de la base de données. Donc, au lieu de
devoir utiliser comme une boucle for-loop, parce que nous avons déjà établi
des voitures, c'est comme une liste de cartes ou la liste des
enregistrements dans la base de données. Nous avons déjà regardé comment
nous devrions utiliser boucles pour ou
pour chaque boucle pour
passer au moins pour obtenir
tous les enregistrements au lieu de me
dire « donnez-moi les voitures ». Et puis, pour chaque carte
qui se trouve dans la base de données, si l'ID correspond, c'est en fait toute cette logique
que je viens de décrire pour nous. Le Tolkien représente donc n'importe quel enregistrement de la base de données. Nous obtenons les propriétés
pour que je puisse dire mon point
m nom, m point année. Donc, si j'avais besoin de
chercher quelque chose, je pourrais utiliser cette expression
lambda pour rechercher nom par oreille. Dans ce cas, nous
effectuons une recherche par pièce d'identité. L'ID est la
valeur transmise par le biais
de la
tentative de navigation de l'utilisateur vers cette page. Je peux voir si la voiture
n'est pas parce qu'ils ont peut-être transmis un numéro TIN d'identification et qu'il
n'y a pas de voiture avec une pièce d'identité dix, ce qui signifie que rien n'aurait
été envoyé dans la base de données. Nous disons donc que si
rien n'a été trouvé
, nous retournons la page. Il y a des moyens de refactionner cela, mais je peux expliquer pourquoi il
a été écrit comme ça et pourquoi je voudrais probablement le
refacter gagné. Il a été écrit comme ça parce qu' une base de données appelée coûte cher. J'aime les considérer
comme une chose coûteuse. Vous le faites quand c'est
nécessaire. Je veux simplement le faire
, mais juste
parce qu'à peu près ce qu'ils disent, c'est que si rien n'
a été fourni, n'attendez pas. Une base de données appelée vérifie si quelque chose a été
fourni et si ce n'est pas le cas, puis tuez-la juste là. La personne perd du temps et des ressources.
Tuez-le juste là. Ne gaspillez pas l'appel de base de données. Après avoir fait l'appel à la base de données, nous voulions toujours savoir
s'il y avait eu un téléphone ? S'il n'est pas trouvé, alors nous retournons introuvables 404. Sinon, nous retournons
le pH avec les données chargées en ligne avec une création où le
Create n'avait que l' vide ou simplement l'
instanciation de la voiture. y avait donc rien dans
la carte, c'était vide. C'est pourquoi nous recevons
le formulaire vide. Parce que le
nom du point de la voiture serait vide. L'année du point de voiture serait vide. C'est à nous de le remplir
et il serait rempli et entré dans la
base de données à la poste. Cependant, dans les
mises à jour essayaient remplir cela avec des données avant
de revenir à la pizza, rappelez-vous que j'ai dit que vous vouliez tout mettre
à l'intérieur des propriétés avant de
l'envoyer à l'apparence réelle.
avant qu'il ne conteste les utilisateurs. Donc, tout comme pour l'
indice, nous sommes sur le point. Nous sommes allés de l'avant et avons lancé la requête. Rappelez-vous donc que
cela était utilisé, c'est utilisé sur la
page elle-même, des modèles de voitures à points. Contrairement à l'index
où nous ne sommes pas, désolé, tout comme pour l'index
où nous remplissons les cartes de données avant de retourner la page. Nous devons le faire
pour la mise à jour. Nous devons donc trouver l'enregistrement,
puis renvoyer la page. Ensuite, il lierait
automatiquement les valeurs existantes
provenant de l'outil de base de données, les champs de saisie
du formulaire généré, qui peuvent être
examinés en quelques secondes. C'est pourquoi il
a été écrit comme ça. S'il n'y a pas d'ID fourni, ne gaspillez pas la base de données, n'
appelez pas, ne supprimez pas l' Sinon, essayez de le trouver. Et si vous ne le trouvez
pas, arrêtez l'exécution,
sinon, allez de l'avant
et affichez la page. Non, cela pourrait être refactorisé
pour avoir une instruction if car ces deux
instructions if alors qu'elles vérifient deux scénarios
différents, font vraiment la même chose. Si nous voulions une réponse
différente à l' une
ou l'autre et que nous avons deux
lignes de code à modifier. Le facteur qui se demande
pourrait être que, d'accord, nous risquons l'appel de la base de données. Nous essayons de trouver
la voiture peu importe, nous n'en avons pas la valeur. Très bien, alors je pourrais juste
dire si la voiture est nulle, parce qu'à la fin de la journée, si null est adopté théoriquement,
il va juste voir si l'ID est
équivalent à null, ce qui n'arriverait jamais. Donc la voiture serait nulle, nous revenons introuvables. Ou si cette valeur est 0 ou si
un identifiant n'existe pas, Kyra sera toujours
nul, retourné et non téléphoné. Vous voyez, je
vous montre simplement que le code généré, mais n'ayez pas peur de l'
explorer et de le modifier,
car vous pourriez penser qu'il pourrait
être plus efficace. Mais je vous donne les deux
scénarios et je vous explique pourquoi un scénario a été
mis en place de cette façon. Et quels en sont les
avantages et les inconvénients ? Maintenant que nous avons une idée de ce que fait
le début et je
ne vais pas modifier cela. Je vais le laisser tel quel. Non, nous pouvons voir ce que la page
HTML doit nous montrer. Donc, la page HTML va
paraître à peu près
identique ou créer. À ce stade, Non, tu
vois bien qu'il y a deux les deux mêmes forums littéralement
là pour le voir des formes. La différence ici serait
cette forme dégénérée ici. Il est dit de mettre à jour la voiture et je suis
allé changer ça pour modifier la voiture. Sortez tout ce dont
il n'a pas besoin. Par défaut, le bouton est
enregistré sur un formulaire décrété. Il a dit créer. Très bien, et on
peut encore une fois prendre le bloc btn et le
mettre ici. De plus, si nous ne voulions pas la
classe qui s'appelle MD4, nous pourrions rencontrer ce que l'on appelle
MD, quel qu'il soit. Je vous montre simplement
que les deux formulaires sont généralement identiques entre un formulaire de création et un formulaire de mise à jour
dans la plupart des applications Web, ils sont généralement identiques. À ce stade, vous pouvez prendre
une autre décision de conception. Vous pourriez créer une page
qui dit peut-être que l'insertion, mise à jour et les insertions qui soutiennent émergence
mentale vers la
mise à jour et l'insertion. Et ils appellent cela absurde. Ce Pij absurde serait à
peu près dans le, ETC. Ai-je obtenu une pièce d'identité sur
Get, est-ce que j'ai eu une pièce d'identité ? Si j'ai eu une pièce d'identité, j'ai essayé de trouver la voiture, puis de
revenir au terrain. Sinon, il suffit de charger
la page vide. De cette façon, si les données sont
présentées, s'afficheront. Si les données ne sont pas
présentées sur le terrain. Et puis il pourrait faire une autre déclaration
if ici pour voir si l'ID est présent à terre une valeur dans le bouton ou montrer l'autre bouton appelé celui-ci est
un bouton de mise à jour. Je voudrais que ce
soit btn-primaire, je voudrais que ce soit T
it pour être btn danger. C'est donc orange. Je ne
fais que vous montrer, je suis juste en train d'expliquer différentes considérations de conception. Chacun a
des contextes différents. Je pourrais donc faire quelque chose
que vous voyez, si je n'ai pas besoin de le
faire de cette façon. Ou vous pourriez faire quelque chose
sur un collègue ou un de vos amis et vous voyez vous n'avez pas besoin de le
faire de cette façon. Mais les contextes doivent toujours être le facteur déterminant de vos décisions lors du
développement d'une application. Continuons. Je ne vais pas
faire ce truc absurde, je vais juste vous donner une idée. Mais le fait est que les
formes sont presque identiques. mêmes règles de validation
seraient appliquées. L'argent à lister est là, nous avons le bouton, nous
avons nos champs de saisie. Je vais juste
réarranger celui-ci. Il ressemble donc la création en fonction de
l'ordre des champs. Mais il y a une chose que je
voulais souligner et c'est que cette entrée pour les cachés a changé tout cela
dans la dernière. Pour les cachés. Si vous revenez à notre page Créer, il n'y a pas de caché. Pour une pièce d'identité. Ce champ caché est
absolument important. Premièrement, c'est caché parce que nos utilisateurs n'ont vraiment pas besoin de
connaître nos
clés primaires. Pensez-y. Sur Amazon, vous pouvez voir
notre numéro de produit, mais ce numéro l'est rarement. La clé Pariah Mary. Vous pouvez voir un numéro ISBN
pour un livre ou quelque chose comme ça. Vous savez, un numéro d'identification
pour nos étudiants. Mais c'est rarement
la clé pariétale. La clé primaire est
interne au système. Cependant, il est absolument
nécessaire pour le camionnage. Que se passe-t-il, car
si nous n'avons pas cette clé
primaire embarquée sur ce formulaire, il va toujours
supposer qu'il s'
agit d'un nouvel enregistrement. Très bien, donc nous devons le
faire, c'est pourquoi je ne l'ai pas parce que c' est toujours un nouveau disque. n'y a aucune pièce d'identité lorsque vous
créez quelque chose. Cependant, lorsque vous modifiez ou mettez à jour tout ce que nous avons passé par
les ongulés, il est évident que l'
ID est très important. Et nous devons nous souvenir de
la pièce d'identité via le formulaire. Ainsi, lorsque cette personne
soumet la formule, nous avons frappé la tête vers le poste, vous voyez beaucoup plus
soudainement à bord ? Oui, nous avons validé. Nous avons déjà examiné à
quoi
ressemble la validation , c'est très bien. Mais ici, où nous
disons que les contextes pointent la
voiture attachée et change
d'état en modifié. Ce qui se passe vraiment ici,
c'est que nous voyons une base de données. Commencez par camionner
cette voiture objet. Nous aurions donc obtenu le record
original de la voiture ici. Si le nom était une
courgette pour faire du sport. C'est ce que nous avons obtenu ici. C'était l'année 2013, c'est ce
que nous avons obtenu. La pièce d'identité était trois. Non, n'entendez pas une fois
qu'elle a été éditée, l'idée ne devrait jamais être éditée car un IID différent signifie qu'il s'agit d'un enregistrement différent. C'est pourquoi il est caché
et nous ne permettons pas à
l'utilisateur de le voir ou de l'
interrompre, mais il est transporté par camion
en arrière-plan. Maintenant, si je l'ai changé de Suzuki. Dans le sport et comme, oh, ce n'était pas un sport. Laissez-moi ôter ce sport. Ce que nous
voyons, c'est une base de données. Commencez à
regarder cet enregistrement et sachez qu'il a été modifié. La base de données saura
qu'elle est modifiée ou Entity Framework
saura qu'elle est modifiée ou autre à
cause de l'ID. Il va donc supposer que
quelque chose change. La seule chose qui ne
doit pas changer, c'est l'ID car l'ID est
présent, il le saura. OK. J'ai un dossier avec
cette pièce d'identité, non ? Non. Je vais donc enregistrer les modifications qui ont été apportées à cet enregistrement avec cet identifiant. Essentiellement, il va se
retrouver avec deux versions. Il va avoir
l'enregistrement original que nous venons de récupérer. Et puis il
aura ce nouvel enregistrement
ou cette nouvelle version
de l'enregistrement COVID, mais des propriétés potentiellement
différentes. Et puis Enregistrer les modifications,
nous dirons, d'accord, je vais enregistrer les nouvelles données dans
la table en conséquence. Ceci, dans celui-ci, vous verrez que nous avons
une prise d'essai parce que c'est une situation plus
délicate. veut dire, que se passe-t-il si deux personnes tentaient de mettre à jour la voiture ? J'ai cliqué sur Modifier cette voiture. Quelques secondes avant que vous ne
cliquiez sur Modifier cette voiture, nous avons tous les deux cet enregistrement
en acier ou au moins qui les deux requis, puis je fais une modification. Je l'ai modifié
de 2013 à 2015
, puis je cliquerai sur Enregistrer. Vous dépenserez sous
le plus long enregistrement et tout votre
enregistrement est en acier parce que vous aviez la version de l'enregistrement avant
que je ne le mette à jour. Lorsque vous cliquez sur Mettre à jour, vous allez essayer
d'enregistrer les modifications. J'ai gagné quelque chose
qui était déjà mis à jour depuis que vous avez cliqué dessus. Cela entraînerait ce genre d' erreur ou je ne
savais pas essayer et attraper ou
gérer les exceptions, exploiter C-sharp, nous essayons de
sauvegarder les modifications, mais alors c'est juste
esquisser explicitement cette exception de
concurrence de mise à jour DB, qui est ce scénario même
que je viens de mentionner. Ils ont besoin de voir cela, eh bien, si la voiture n'existe pas, alors ne retournez pas de téléphone
parce qu'elle
a peut-être été supprimée au moment où
j'essaie de la mettre à jour. S'il ne pense pas depuis, retournez pas le téléphone, sinon, lancez
simplement une exception et erreur plus de
façons Griswold de gérer cela, mais c'est ce
que dit le code généré. nous. Ce n'est donc pas un problème. Cependant, si le procès
a été couronné de succès, il n'y a rien eu de repéré, alors nous retournons le discours de l'index. Non, il s'agit simplement d'une voiture
de méthode qui
retourne simplement vrai ou faux. base de données vérifie l'écurie du véhicule
s'il y a un enregistrement. Et voici une autre expression
lambda. Et juste pour vous montrer que
le Tolkien n'a vraiment pas importance vers le haut est la
même expression lambda, mais nous avons utilisé m ici. C'est la même
expression lambda qui utilise simplement E. Si vous vouliez les
comparer à nouveau, suffit de copier ceci et de le
placer près de cela. J'ai regardé le fait
qu'il s'agit du même code, juste deux
lambda Tolkien différents. Il s'agit simplement de dire : Y a-t-il une voiture dans la
base de données qui a cette carte d'identité ? Si oui, alors très bien. Si ce n'est pas le cas, revenez. Je n'ai pas téléphoné. Donc, s'il existe, cela signifie que les données sont toujours
que j'essaie de modifier. Donc, il y a une exception, ou nous pourrions simplement
envoyer une erreur de bouton disant Hey, quelque chose
a mal tourné. Vous voudrez probablement réessayer
cette opération. Très bien, voyons comment fonctionne cette opération de
mise à jour. Donc, je vais juste
aller de l'avant et sauter. Très bien, donc non, voyons comment fonctionne cette fonctionnalité de
mise à jour. Lorsque je clique sur Modifier. Remarquez qu'il va
apporter les données. Cela n'aurait
pas dû être un bouton rouge, cela aurait
dû être un avertissement btn, pas un danger de dix tirets. Permettez-moi de faire ce changement. Pas d'avertissement pour un bouton orange. Après avoir fait ce changement, je peux simplement me rafraîchir. Et on y va. Non, c'est un bouton orange. Voyons donc à quoi ressemble cette opération d'
édition. Remarquez dans l'URL que vous
voyez la mise à jour oblique des voitures, puis les chaînes de requête. Rappelez-vous donc lorsque nous avons
parlé de chaîne de requête appelée données transmises entre les formulaires. Donc, lorsque nous utilisons un GET, nous ne spécifions pas
qu'il mettra toutes les données et chaînes de requête
qui peuvent être dangereuses. Et alors que nous travaillons
sur un site Web statique sans que rien de
particulièrement dangereux soit transmis de notre
formulaire à n'importe où, c'était très bien. Cependant, vous ne
remarquerez pas qu'ils génèrent
explicitement des formulaires
dont la méthode est égale à
la publication, car lorsque vous publiez les données ou lorsque
vous
envoyez le formulaire, vous ne souhaitez pas envoyer données dans la chaîne de requête. Surtout comme
lorsque vous
traitez des informations de carte de crédit ou des informations personnelles des utilisateurs. Encore ce
nom d'utilisateur et ce mot de passe. Vous ne voulez pas cela dans
la chaîne de requête que je parle. Bien qu'il soit inoffensif d'utiliser
la chaîne de requête pour l'ID, elle peut ne pas être inoffensive lorsque vous soumettez à partir du formulaire. C'est pourquoi nous voulons
toujours nous assurer que nos formulaires,
notre méthode est égale à la publication. Cependant, faisons un peu d'
expérimentation ici. Nous parlons donc
des deux trous. Donc, lorsque nous accédons
à l'index avec l'ID, je vais juste replacer un
point d'arrêt ici. Je vais juste le rafraîchir quand
il atteindra le point de rupture. Et nous survolons
la propriété ID, vous voyez que cet ID est transmis. C'est donc ce qui s'est ouvert. Nous obtenons cet ID qui passe
par la chaîne de requête. Et puis, nous sommes
en mesure de déterminer, d'accord, que ces voitures à points
existent dans notre système. Maintenant, regardez ce qui se passe lorsque je change cet identifiant par un identifiant
qui n'existe pas. Je n'ai qu'une seule voiture
dans mon identifiant système. n'y a pas de voiture avec le numéro d'identification. Si j'essayais de faire des bros
là-bas, j'en ai dix. Très bien. Et ensuite, si je
fais juste F5 et que je continue, alors vous verriez que
cela dit simplement que je ne peux
pas téléphoner au HTTP ou au fluorophore. C'est donc ce que nous
obtenons en appelant le retour, et non par téléphone. Très bien, donc c'est
fondamentalement maintenu, ça marche. Remarquez une fois de plus qu'il s'
agit d'une méthode on post. La méthode on post
est ce qui va fonctionner avec le formulaire qui est soumis
avec la méthode est égal à post. Très bien, permettez-moi de
revenir à l'enregistrement
que nous avons Faisons réaliser. L'année était donc 2215, et non 2013. C'est très bien. Je suis allé sauver
, puis j'ai regardé ça. 2015. N'oubliez pas qu'il se charge à partir de la base de données
chaque fois que vous accédez à l'index, il interroge la base de données. Quoi que vous voyez ici,
c'est
l'état actuel de l'enregistrement qui
est en bref. mise à jour complète fonctionne. Peu importe à quel point
un système peut paraître compliqué, quel point les boutons,
les animations, etc. Ce que nous faisons ici est à la racine de chaque système, le site Web avec lequel
vous interagissez, tout ce qu'ils font
est de vous permettre placer des données dans la base de données
par la réforme, modifié via un formulaire. Regardez-le à travers une
page d'index ou une page de détails que nous allons consulter
dans quelques-uns ou supprimés. Finalement. C'est tout
ce qui se passe vraiment, quel que soit le système que
vous regardez. Lorsque nous reviendrons, nous envisagerons implémenter ou de
supprimer des fonctionnalités.
12. Ajouter des détails Page de rasage: Très bien, donc on est de retour. Et je sais que dans la leçon
précédente, j'ai dit que nous travaillerions
sur la suppression, mais j'ai une surprise
pour la suppression, nous allons faire les choses un peu différemment pour la suppression. Au lieu de cela, travaillons sur
notre discours détaillé. Très bien, passons
à notre code. Et je pense que
nous connaissons maintenant le Drew. On va se battre
ou détailler la vitesse. Donc, cliquez avec le bouton droit sur le dossier voitures, ajoutez la page Razor à l'aide d'
Entity Framework, nous appelons cela des détails. Et le modèle serait
le modèle pour plus de détails. Ensuite, notre modèle est une voiture et
tout le reste reste. Et nous obtenons notre page
pour les détails avec son fichier de code correspondant. Sachez que la
page de détails n'est à
peu près qu'une autre page qui nous aide à conduire à la r
de la corrosion qui est lue. À ce stade, il
peut être
difficile de voir la pertinence
de la page de détails. Parce que ce que la page de
détails vous
montre vraiment , ce sont les
détails de quelque chose, alors que l'index
montre vraiment le manque d'aperçu. Donc, si notre table comportait peut-être
20 ou 50 champs différents, peut-être même dix champs, vous ne voudriez pas tous ceux
de la liste. Considérable comme un coût, une liste de clients
ou même sur Amazon. Lorsque vous regardez
les produits sur Amazon, ils ne vous montrent pas tout ce
qui concerne la protéine. Ils vous montrent
le nom, leur prix, peut-être combien de temps cela
prendrait pour expédier. Mais au moment où vous
cliquez sur ce produit,
vous voyez alors tout ce que je construis un prototype, vous voyez toutes les
tailles
et couleurs potentielles , d'où il vient et quel
matériau le fabrique,
etc. vraiment à quoi sert la page de
détails. Dans ce cas, il est possible de soutenir que c'est facultatif parce que la voiture a
vraiment
deux détails à montrer à n'importe quel point qui
sont l'oreille et le nom. Eh bien, encore une fois, s'
il s'agissait d'une table plus grande avec plus de détails à afficher, vous ne
voudriez pas tous les
lister sur l'
index à ce moment-là. Vous ne
voudriez probablement pas me montrer que est l'année de la voiture ou
le nom de la voiture. Disons donc que nous ne
voulions pas montrer l'année. Je vais juste
commenter cela. Donc, lorsque vous
regardez la page d'index, vous ne voyez que
le nom de la voiture. Cependant, vous voulez voir le reste des
détails sur la voiture. Vous cliquez sur la
page de détails où ils ont le lien ici,
puis vous savez que nous avons créé la page, nous l'avons branchée. Il va donc aller sur cette page de détails
détails que CSS HTML. Je vais simplement modifier cela
pour dire les détails de la voiture. Débarrassez-vous de cela à chaque Doug, il y a un ancien formulaire
car une fois de plus, il ne s'agit que de lire des
données, des données sous forme de
lien généré automatiquement pour passer à Edit. Voici donc une autre chose. Il est à la recherche,
modifiez-le dès l'emballage. Nous utilisons la mise à jour du nom de page. Je dois donc m'
assurer de changer cela. Ensuite, nous pourrons revenir à
la liste si nous le désirons. Très bien, alors que fait vraiment
la page de détails ou
le fichier de code ? Il a une voiture immobilière, il n'a pas de clause de
propriété Bend. Il n'y a pas de présence étrangère, mais elle possède la propriété. Et puis il fait la même
chose où il est dit : «
Donnez-moi le disque avec l'iode qui
cherche cette pièce d'identité. S'il est nul, le retour n'a pas été téléphoné. Ce n'est pas nul, puis il
essaie de trouver l'enregistrement. Si vous trouvez l'enregistrement, ce n'est pas un téléphone, retournez la page. C'est donc un peu le même code que celui que nous avons vu généré
pour la page d'édition. Très bien, je ne vais pas
faire les modifications ici. Ces deux éléments doivent être comparés le score habituel prêt à
l'emploi notre petite modification où nous
venons de faire un appel de base de données et
déterminer si elle n'est pas trouvée. Vous pouvez donc les comparer, mais laissez-nous aller de l'avant et courir. Je vais donc simplement passer à Control F5 que nous
puissions examiner les détails
du pH qui nous apportent à partir de notre page d'index. Si je frappe les détails, je vais voir les détails de la
carte et
ça me donnera
tous les détails. Une fois de plus,
cela est généré. Vous pouvez modifier l'aspect et la
sensation de celui-ci selon vos besoins. À partir de là, je peux cliquer dessus. Et comme j'ai modifié le lien, je n'ai aucun problème à
sauter sur la page d'édition. Je peux revenir à la liste. Encore une fois, toute
la navigation est étroitement couplée ici car chaque lien sait où trouver. C'est très, très
important à partir de n'importe quel pH, vous devriez pouvoir
naviguer vers une autre page. Ou le pH nul doit être supérieur à deux ou trois clics fonction de la taille d'un site Web. Mais il existe généralement
une
politique de trois clics pour
naviguer entre les pages. C'est vraiment tout pour les
détails, agréable et simple, comparé à tout
ce que nous avons
vécu avec la création et l'édition pour voir que les
détails sont vraiment simplement chargés dans l'
enregistrement et nous montrent. Vous pouvez modifier ce qui est
affiché sur l'index. Encore une fois, si vous ne voulez pas toutes les données sur la page d'index, c'est pourquoi nous avons
la page de détails pour montrer ce qui n'était pas
affiché dans la liste. Quand nous
reviendrons, nous allons envisager utiliser un jQuery
avec notre suppression. Parce qu'avec notre suppression, je ne vais pas créer la page
entière pour la suppression. Vous avez deux
façons de le voir et nous
explorerons les options à notre
retour.
13. Ajouter une page de l'effraction: Les gars, bienvenue. Nous allons
envisager de travailler avec notre opération de suppression. J'ai commencé à mentionner
qu'il y a généralement deux modèles qui
gouvernent la suppression se produit. Premièrement, vous pouvez définir la
hauteur de l'avance, ce qui
ressemble vraiment à un discours détaillé, mais il sert également de page de
confirmation car vous souhaitez permettre à l'utilisateur voir l'enregistrement qu'il est
capable de supprimer puis demandez-leur Êtes-vous sûr de vouloir supprimer ? Regardons ça d'abord. Cela suit le même schéma que
nous avons suivi. Allez-y et ajoutez une nouvelle
page Razor à l'aide d'Entity Framework. Je vais appeler ça « supprimer ». À partir du gabarit. Je choisis simplement les
besoins ou le même modèle. Ensuite, nous obtenons notre page générée à supprimer avec son fichier de code. Une fois de plus, en injectant
le contexte DB, nous avons également un bouton
approprié pour la voiture. Par conséquent, une
forme ou une collecte de données
va avoir lieu ici. Sur Git, nous avons le même type de logique que celui que nous venons de
voir avec l'édition. La page de détails
où nous obtenons l'ID, assurez-vous qu'elle n'est pas nulle, obtenez l'enregistrement et retourne
au pH si j'ai été trouvé. Mais sur le post, il va également vérifier
que l'ID n'est pas vide. Notez donc qu'il ne
cherche que la pièce d'identité sur Post. Il est très possible de simplement prendre un paramètre qui correspond
aux données
présentes sur la page. Permettez-moi de faire
le parallèle ici. Avec notre opération de mise à jour. Nous avons dit d'acheter une propriété
sur toute la voiture. Notez qu'il n'y a aucun
paramètre dans OnPause. C'est parce que
tout l'objet de la voiture comportait des champs présents sur le formulaire. Nous avions donc une pièce d'identité, nous avions
le nom, l'année. Ainsi, lorsque nous cliquons sur Enregistrer, il sérialiserait tous les
points de données
saisis et
les placerait à l'intérieur des voitures. C'est pourquoi je lie les propriétés, essentiellement en camionnant
les données qui sont entrées dans l'objet, puis nous pouvons l'opérer. Connaissant le cas d'une suppression, je n'ai vraiment pas besoin de connaître
le nom et l'année. J'ai vraiment besoin
de savoir quel est l'ID de l'enregistrement qui
doit être supprimé. Ensuite, je peux spécifier
dans OnPause que je
ne cherche que l'ID. Encore une fois, je peux
faire tous les contrôles. Vérifiez si c'est nul. Je veux dire, si j'
essaie de ne rien supprimer, alors ne retournez pas le dossier, mais sinon essayez de trouver l'enregistrement de la voiture qui
doit être supprimé. Donc cette fois, nous allons simplement
utiliser cette recherche asynchrone. Donc, c'est un peu différent des par défaut
du premier ordre parce que l'amende ces Sing utilise
les valeurs de clé afin que je puisse me disperser dans Id par opposition
au premier ou aux valeurs par défaut qui nécessite une condition ou
cette expression lambda, là où c'est vrai, puis nous obtenons une voiture,
alors que la trouvaille, il va voir
aller à la table et trouver un enregistrement avec cet
identifiant pour la clé primaire,
qui, bien sûr, se retrouve toujours
dans le risque que ce soit non. Nous avons donc essayé de trouver la voiture. Si la
voiture n'est pas égale à non,
alors nous procédons à la
suppression de la base de données des voitures, à obtenir la table des voitures et à supprimer cet enregistrement. Nous devons donc trouver le record. Ensuite, nous supprimons l'enregistrement. Une fois de plus, nous augmentons les
données afin de sauvegarder les modifications. Après tout cela, nous revenons à l'index. Donc, même si Kiara était
mode dans ce cas, nous n'allons pas
renvoyer aucune personne qui n'a pas téléphoné. Nous allons juste
rediriger vers l'index. Peut-être essayez-vous de
supprimer quelque chose qui comptait lorsque
vous cliquez sur la piste, quelqu'un d'autre, il en
avait besoin, pas de mal, pas de faute, revenez simplement
à l'index. Encore une fois, il
ne s'agit que de code généré. Si vous souhaitez faire quelque chose de
différent dans vos scénarios, n'hésitez pas à
le modifier selon vos besoins. Ce scénario fonctionne bien car lorsque nous passons à la
suppression, nous en voyons un. Il ressemble à des détails. Il s'agit du même code que celui qui
figurait sur la page de détails. Cependant, nous avons un message. Voulez-vous vraiment supprimer cela ? Je vais juste faire ce que nous faisons
toujours ici où je
vois que les principaux changements
frappent la voiture de suppression. Voulez-vous vraiment supprimer cela ? Nous avons montré les
détails de la voiture, mais regardez le formulaire. Cette fois, nous avons un formulaire sur
tout ce qui se trouve dans cette forme. Eh bien, oui, c'est la méthode post, mais tout ce qu'il y a, c'est le
caché pour l'identification de la voiture. Il s'agit d'une analyse de base P4. Le Je suis je vais
me lier à cette propriété. Vous auriez donc vu
ce formulaire ESP, le Create, voir tout ce que les mises à jour, liant à cet ID de point de voiture de
propriété. Mais le nom de la
propriété sera ID. Et ensuite, dans l'option Supprimer, cela va simplement le lier
à l'ID du paramètre. C'est ainsi que je
sais que je ne
reçois que la pièce d'identité de
cette soumission de formulaire. Nous voyons donc ici qu'il s'agit
d'un bouton de soumission avec la suppression valide et qu'il s'agit d'un danger de tiret BTN,
ce qui est logique. Si vous changez d'avis, vous pouvez toujours revenir à la liste. Très bien, jetons un coup d'œil à ce que nous obtenons avec la suppression. Dans la liste, je vais cliquer
pour supprimer. Il va charger mon enregistrement, supprimer des voitures, donc vous
voulez le supprimer. Ainsi, dans les détails
de l'enregistrement, nous pouvons choisir de supprimer ou de
revenir à la liste. Donc, si je clique sur Supprimer, cela revient à la
liste et il n'y
a plus de voiture dans ma base de données ou du
moins les lois sur la base de données. Une carte de moins et elle avait
avant que je ne fasse cette opération. Je vais juste
recréer la voiture rapidement. Suzuki Swift sport. Et c'était un 2013
qui allait créer. Très bien, nous avons donc à nouveau
notre dossier et vous pouvez le faire pour
autant d'enregistrements que nécessaire. C'est donc la première option. Vous souhaitez autoriser
l'utilisateur à revoir l'
enregistrement et à lui demander Êtes-vous sûr qu'il n'a pas pu le
supprimer et vous confirmez ? Sachez que si je ne
voulais pas introduire toute
une autre page juste
pour l'opération de suppression. Et si je
le voulais ici ? Lorsque la personne clique sur Supprimer, je lui ai demandé peut-être de s'afficher. Voulez-vous vraiment supprimer ? Cliquez sur Oui, puis
la suppression se produit. Essayons quelque chose qu' aucune méthode
d'implémentation de cela ne serait d'envelopper chaque lien de suppression dans
un formulaire et d'en faire un bouton de
soumission au lieu d'une URL à la suppression. Oui, nous avons la page, mais revenons
à notre index et modifions en quelque
sorte ce qui
se passe ici. Je pourrais dire forme ici. Permettez-moi de bien comprendre mon orthographe. Sous cette forme, nous
allons avoir un bouton. En gros, ce bouton
va voir la même chose que le
bouton actuel voit ne pas manger. Je ne veux pas nécessairement que ça
ressemble à un bouton. Je veux dire, je suppose qu'à
ce moment-là, nous pouvons probablement commencer à être
créatifs avec nos liens aussi. Donc, pas de problème. Je vais juste dire que la classe
est égale à vt n dash. C'est l'édition. Je vais probablement vouloir que ce soit comme un avertissement. C'est ça. C'est le bouton. Bien sûr, n'importe quel bouton
doit être T
, puis btn tiret le
type de bouton. Il s'agit d'un détail, donc il s'agirait d'informations sur l'industrie
b2, juste pour montrer les informations. Et puis ce bouton va
être le coût égal à b2 et dangereux, Non, l'utilisateur ne serait pas en mesure dire lequel est un bouton,
lequel est un lien. Ils se ressembleront tous. Nous avons ce bouton Supprimer. Ce que nous pouvons faire, c'est dire onclick. Nous avons déjà
examiné cet événement
lorsque nous parlons de
JavaScript plus tôt, je peux voir, Êtes-vous sûr de
vouloir supprimer cet enregistrement ? Donc, sur le clic, je vais
retourner une confirmation. C'est donc une méthode intégrée. Et quand allons-nous examiner la méthode d'alerte en JavaScript ? Sur le clic, confirmé n'est qu'
une autre méthode JavaScript que je vois déclic
retour, confirmez. Voulez-vous vraiment
supprimer cet enregistrement ? Je suis qui
donne juste un oui, pas de boîte. C'est vraiment tout ce
dont j'ai besoin pour le bouton. Mais revenons à la forme. Nous voulons nous assurer que
c'est la méthode post. Maintenant, je vais expliquer
pourquoi nous voulions
être explicites à propos de la publication. Il y a un certain nombre de choses
qui se passent avec les messages. Les avantages implicites de
l'utilisation des publications que nous avons
déjà explorées, où nous avons
parlé du fait que les données ne sont pas
envoyées dans l'URL. Il est caché
en arrière-plan. C'est donc bien. Je suis une protection inhérente
aux données sensibles telles que le nom d'utilisateur, le
mot de passe,
les
informations de carte de crédit, etc. Non, vous vous demandez
probablement, d'accord, alors depuis la livraison,
peut-être la pièce d'identité. Eh bien, nous avons déjà vu que dans
le forum Supprimer, même alors, ils ont essayé d'utiliser la publication ici parce que ce même concept, ils ont frappé l'ID et ensuite
nous avons eu le bouton Supprimer. C'est la même chose que nous faisons, sauf que
nous le faisons dans la liste de l'index. Mais les autres avantages
de la publication seraient ceux intégrés à ASP.Net Core, nos fonctionnalités de sécurité contre
XSS et le CRS en cas d'attaques. C'est essentiellement
sans entrer dans les détails de ce que ces
deux-là signifient et ainsi de suite. La façon dont ils fonctionnent serait
que les gens peuvent utiliser JavaScript et détourner de manière malveillante les données
envoyées sur le réseau. Qu'est-ce qu'ASP.Net a intégré
ou ASP.Net Core. Chaque fois que vous avez un formulaire et que
vous en faites une publication de méthode, puis
que vous l'avez en poste en
attendant ce genre d'envoi sur cette soumission. Ils ont la validation de l'anti-étranger
Tolkien que toute demande envoyée dans une publication est valide depuis le système et n'est pas détournée
par une entité externe. Très bien, c'est comme une fonctionnalité
de sécurité intégrée. Je n'ai pas mentionné que
vous ne remarquiez pas que tout
cela se passe vraiment en arrière-plan. C'est pourquoi il est
important que même si nous ne
générons ni ne formons ici, vous vouliez toujours vous
assurer que vous l'avez comme poste de
méthode et que ces fonctionnalités de
sécurité seraient presque implicites. D'autres choses que nous voulons faire maintenant que nous avons le formulaire, nous avons le bouton, nous
devons lui dire où aller. Maintenant, quand je dis bizarre de but, je veux dire que les autres pages qui avaient des forums comme voyons, le Create ils ont créé le
formulaire qu'il avait dit méthode postent. Il n'avait rien explicite pour dire
où il devrait aller. En effet, il supposera qu'une fois le formulaire soumis, il s'agit d'une demande postérieure. Donc automatiquement, il
ira à la poste. Sinon, il y aura la
même chose avec les mises à jour, la même chose avec
l'index de suppression,
cependant, n'en a qu'une seule sur Obtenir. Il n'y a pas de messages. Et nous saurons que nous
mettons en place un formulaire qui
va essayer
d'appeler une méthode post sur la
page d'index qui n'existe pas. Ce que nous pouvons faire maintenant, c'est
créer des gestionnaires personnalisés. Donc, il suffit de camionner, juste pour qu'
on comprenne sur le poste. Et celui que
nous sommes capables de créer, que l'on appelle des gestionnaires. Ces méthodes obtiennent, publient, font n'importe quoi en
arrière-plan, elles sont des gestionnaires. C'est pourquoi nous les appelons. Nous devons indiquer au formulaire qu'
il doit aller à son
ISP, le gestionnaire de tiret de page de tiret P. Je vais voir DDGT. C'est le nom du
gestionnaire auquel il doit aller. La méthode est postérieure. Non. En plus de cela, je voulais également
obtenir la valeur de l'identifiant. Je vais voir que c'est B
dash, a écrit Dash ID. Ce n'est pas moi qui dis que lorsque vous soumettez le formulaire, je veux que vous transmettiez la
valeur que j'ai écrite ou une
valeur de chaîne de requête portant ce nom. Donc, si j'ai dit ID de voiture
ou si j'ai dit pulpy, quel que soit ce type
là après l'écriture du mot, c'est le nom de la
chaîne de requête qui indique
le nom du paramètre que mon
gestionnaire recherchera . Je vais donc le
laisser comme iode de voiture au lieu de la pièce d'identité. Très bien, maintenant vous pouvez voir
explicitement ce que je veux dire. Donc, ASP Dash route, ID de voiture, il devrait avoir la valeur
de l'ID de point d'article de signe. Remarquez que chaque fois que nous avons
cliqué sur Modifier ou sur Détails, il est automatiquement
envoyé via l'ID. C'est parce qu'à partir de
la boucle for-each, chaque élément contient une liaison qui
est l'ID de tiret racine p ici. C'est déjà ce qui se passe. Nous voyons que cela se produit
lorsque vous cliquez sur les détails. Elle s'appelle une
page de détails et elle envoie valeur
de l'identifiant. C'est pourquoi sur Get, il surveille les pièces d'identité. Tout comme avec les détails ou la
suppression plutôt sur Post, il cherche un ID, et c'est parce que la suppression, laissez-moi le trouver rapidement
dans le Supprimer, nous sommes en fait assis ici. Je ne fais que vous montrer
différentes saveurs. Vous obtenez le code généré, mais il est bon de comprendre
comment faire la même
chose de plusieurs manières. Cela fonctionne avec le formulaire et il envoie
la pièce d'identité cette semaine. Cela fonctionnera également avec moins de lignes de code,
uniquement le formulaire. Cependant, en disant aller dans ce gestionnaire de
page et envoyer un paramètre appelé
ID de voiture avec la même valeur d'ID. C'est une méthode de publication. Nous ajoutons cette
confirmation au bouton. Et je vais simplement
commenter le lien existant. Mais ce que nous allons
faire maintenant, c'est créer ce gestionnaire de suppression
dans le fichier d'index. Dans le code d'index derrière. Je peux étendre cela et je peux dire public et non en
faire une tâche asynchrone. Disons le résultat de l'action de la tâche parce que je voudrais qu'il
renvoie un résultat réel. Et je vais dire
sur post, supprimer. Nous allons examiner la
syntaxe sur Get on post. Et je peux dire post
asynchrone si je veux. C'est une convention de dénomination
qu'ils reconnaissent. C'est facultatif. Mais mon point est que je sais c'est une méthode post
du forum, donc je dois spécifier sur
post pour appeler la suppression. J'ai dit que votre gestionnaire est supprimé. Il
recherchera automatiquement un gestionnaire nommé delete qui attend
une réponse post-réponse. Par conséquent, le simple fait de mettre une
affiche sur git
indiquera au gestionnaire quel
type de demande devrait être recherché dans
la tentative
du Bureau de post-suppression. Ce que je vais vraiment faire,
c'est simplement réutiliser ce code. Je vais juste le copier à
partir de la suppression générée. Certaines choses ne seront pas
adultes, mais c'est très bien. Nous pouvons remplir les blancs, mais surtout,
ce sont les paramètres. Je vais donc dire l'identifiant de la voiture au point d'
interrogation. Pourquoi choisir une carte d'identité ? Parce que dans mon formulaire, l'index, j'ai vu que votre racine ASPE est un ID de voiture pour
tout le monde, c'était l'ID. Que faire pour celui-là ? Je vais dire une carte d'identité de voiture. Je ne le fais pas pour
une raison particulière. Je ne fais que te montrer. Ce que fait vraiment la racine ASP. Si je change l'ID
, mon gestionnaire doit
chercher une pièce d'identité. Si je l'ai changé pour Puppy, il doit chercher un chiot. Je vais juste
laisser ça comme carte d'identité nous puissions voir
la différence. Donc, ID de voiture du formulaire, il va appeler la suppression du pH 100 et c'est
une méthode post. Donc, il va aller
ici et chercher un gestionnaire appelé
delete
conçu pour les réponses postérieures qui prend en charge un
paramètre appelé Car ID, puis le code
devra être ajusté car aucune pièce d'identité
n'est plus une pièce d'identité ici, il ne s'agit pas d'une carte d'identité, d'une voiture. Maintenant, j'ai vu qu'
il n'y a pas de voiture sûre d'une voiture, c'est très bien. Je peux facilement voir, donnez-moi une
variable locale appelée voiture, car je n'ai pas besoin d'une propriété de la classe comme la dernière fois. J'ai juste besoin d'une
propriété locale appelée voiture. Va chercher la voiture. Vous avez trouvé la voiture ? Oui ou non ? Si oui, retirez la voiture. Très bien, il ne s'agit donc
que de ma variable locale à l'intérieur de la suppression. Lorsque vous cliquez sur Supprimer, nous avons essayé de trouver une pièce d'identité, monsieur. Nous avons essayé de les déterminer. J'ai une valeur. Si ce n'est pas le cas, téléphonez. Vous ne voudriez probablement pas
téléphoner ici. Si nous supprimons
directement de l'index, c'est très bien, c'est très bien. Nous pouvons le laisser. Je
veux dire, encore une fois, le contexte déterminera comment vous voulez utiliser une
expérience. Donc, c'est très bien. Nous le laissons, nous le
laissons comme carte d'identité de voiture. Si vous cliquez dessus, pas téléphoné, essayez de trouver la voiture. Si la voiture n'est pas égale à null, nous la supprimons
puis
nous rechargeons la page d'index. Lisez Erich à *****. Eh bien, cela pourrait facilement être redirigé vers
une page sans rien dedans. Donc, ça dirait littéralement, sur
quelle page suis-je ? Permettez-moi de recharger cette page. On pourrait aussi dire « pitch de retour ». C'est pourquoi je l'ai fait. J'ai vraiment des résultats ici. Donc, contrairement à
celui-ci, il n'y avait pas de type retour. Il n'avait donc pas besoin des résultats de l'action
i. Mais dans ce cas, je
veux renvoyer une forme de commande pour me dire que je
retourne à la page sur laquelle je suis. C'est pourquoi j'ai dit que la tâche, le résultat de
l'action ici. rétinol fait simplement la redirection
vers la page sans aucune valeur. Je ne fais que vous montrer
les différents scénarios. Une fois que vous
vous sentez à l'aise, vous commencez
à écrire le code à un niveau expert,
alors vous seriez comme ,
ok, oui, je vois
comment tout va ensemble et
que tout fonctionne. Prenons cet autre code Delete ou ce
code de suppression alternatif pour un test. Il a donc fallu des
voitures et ensuite, on peut résoudre ce
problème d'affichage plus tard. Pas de problème. Cliquez sur Supprimer. Voici notre invite. Voulez-vous vraiment
supprimer cet enregistrement ? Si on clique sur OK, ça va, ça a provoqué
le gestionnaire, puis la suppression a lu
Eric au pH. Nous allons donc créer
une autre voiture d'essai. Une année aléatoire. Je vais mettre un point de rupture. Je ne suis pas en mode débogage. Laissez-moi passer
en mode débogage, puis nous pourrons mettre un point d'arrêt pour
voir ce qui se passe. Lorsque je clique sur Supprimer. Je reçois le clic d'invite, OK, puis il
appelle le gestionnaire. Donc, une fois de plus, il savait où chercher parce que j'ai dit le formulaire, utilise cette méthode particulière et je transmets cet ID d'itinéraire
particulier. Et c'est la demande de méthode, la méthode à utiliser. Tous les trois
se combinent pour laisser le formulaire nul qui veut qu'
il soit soumis. Il devrait toucher ce gestionnaire et le côté codage
de ce gestionnaire, son nom suggère qu'il s'agit, c'est
un, 100 censé
gérer ce scénario. Ce scénario est que je veux
supprimer cette voiture, les numéros
de voiture trois, d'accord, donc nous voyons que l'ID de l'
itinéraire est en cours. Bien sûr, il
a téléphoné à la voiture dans la base de données ou il
trouvera la base de données actuelle, supprimera, puis redirigera
vers la page sur laquelle elle se trouve. Alors laissez-moi juste frapper
F5 et vous voyez que vous venez de lire Eric
sans aucune agitation. Très bien, donc j'ai rapidement corrigé l'affichage, c'est que vous avez ici
avec les boutons. Et c'est vraiment une solution simple. Probabilité, même un HUC, selon la façon dont vous le regardez. Mais au lieu de mettre
les étiquettes d'ancrage de l'ancien côté, j'ai tout mis dans la forme parce que la forme est
ce qui brisait les lignes. Je mets donc simplement les balises d'ancrage
dans le formulaire et c'est vraiment pour connaître les conséquences car à la fin de la journée, seul le bouton
fera la soumission. Si je clique sur Modifier, il va simplement s'éloigner. Si je clique sur Détails,
il disparaît. Ensuite, si je clique sur Supprimer, je suis
automatiquement annulé. Il ne se passe rien. Et puis, si je clique sur OK, nous avons vu ce qui
se passe. C'est un trou. Vous pouvez commencer à travailler un peu de JavaScript dans le
nœud pour commencer à voir, ok, eh bien, c'est ce qu'
il est censé faire. Quand nous reviendrons, je vais vous
montrer un peu
plus de JavaScript. Je vais commencer à coiffer nos pages car nous voyons que notre bouton
Créer est haut. On dirait un lien. Nous avons commencé à
regarder total pour
styler le bouton Modifier, la liste des boutons est toujours un lien. Les détails comportent deux liens. Lorsque nous reviendrons, nous examinerons une invite de
confirmation plus robuste. Nous allons utiliser cette
bibliothèque appelée Sweet Alerts. C'est un. Et comment pouvons-nous utiliser JavaScript
ou jQuery pour obtenir cela. Et deux vont commencer
à coiffer un peu plus les RPG.
14. Utiliser les vues partielles et les améliorations de l'UI: Bon, bon retour. Notre objectif pour cette
leçon est donc de donner un style à tous nos liens pour paraître un
peu plus amical. Et ce que nous voulons faire, c'est une confirmation un peu plus solide sur la suppression à tout le moins. Commençons. Tout d'abord, créons la
modification et créons un lien. Laissez-moi passer du mode de débogage, passez à mon fichier index.html, et voici le bouton Créer. Nous avons donc vu que tout ce que nous avons
à faire pour nos étiquettes d'ancrage c'est leur donner le tiret de classe BTN. Je suis le principal pour le Create. Devenons un peu plus créatifs
lorsque vous
voudrez peut-être penser
à corriger les icônes ? Parfois, vous ne
voulez pas que le mot entier soit
modifié ni les détails du mot entier. Et vous pouvez même supprimer un peu
ces icônes de tuyaux. Ou même comme le Create
que vous voudriez probablement et c'est un
signe plus sur son âme. Ce que nous pouvons utiliser pour
cela, c'est Font Awesome, qui est une bibliothèque qui
comporte un certain nombre d'icônes. Et nous pouvons l'examiner rapidement. Si vous sautez sur Font Awesome.com et que nous
regardons les icônes de la version 4.7, vous verrez que
vous avez plusieurs icônes
que vous pouvez utiliser. La plupart d'entre eux sont gratuits. Vous devrez peut-être
payer ou vous inscrire un compte qu'ils
ont, mais c'est très bien. Mais en ce moment, il y a
tellement d'icônes que vous
sortez de la boîte que
c'est vraiment cool. Donc, si vous voulez un signe plus, je suis sûr que
Pelosi utilise plus. Je pense qu'ils ont comme un haricot ou ordures ou quelque chose
pour signifier supprimer. Mais ils ont quelques
icônes que nous pouvons utiliser pour afficher
certaines choses. On y va, poubelle. Donc, parfois, vous voulez une icône. Que
pensez-vous être maintenant ? On appelle ça
autre chose, mais pas de problème. Voyons comment intégrer
cela dans notre projet. Revenons à notre code. Nous pouvons cliquer avec le bouton droit sur le dossier racine
dub, dub, dub. Ensuite, nous pouvons ajouter une bibliothèque côté
client. Lorsque nous faisons cela, il suffit de taper la police. plus, de nombreux sièges déjà en quelque sorte
de remplissage nous devaient. Donc, Font, génial, sélecteur d'icônes. Et puis ce n'est pas le 101. Ce n'est pas un conférencier d'icônes. Laissez-moi réessayer. Je ne fais que supprimer l'emplacement cible. Permettez-moi de vous
conseiller et de recommencer. Ajoutez donc une bibliothèque côté client. Je vais juste taper la police, et le voilà,
tiret de police, Awesome. C'est ce que je veux. Lorsque nous cliquons sur ce bouton, vous
verrez que nous
allons le placer à
l'emplacement cible de la
police dub, dub, dub, dub route slash. Génial. Mais j'aime que toutes mes bibliothèques tierces soient
organisées au même endroit. Donc, au lieu de cela, je vais
dire dub, dub, dub route slash, LIB slash Font. génial, c'est là que je veux. Mais ce sont tous les dossiers
que nous recevrons. Et je ne vais rien
modifier. Je vais choisir
des fichiers spécifiques. Je vais juste aller de l'
avant et cliquer sur Installer. Et puis il
téléchargera le nécessaire pour moi et l'ajoutera au
dossier que je spécifie. Le voilà, Font Awesome. Nous avons également obtenu un fichier
supplémentaire sous la forme de ce JSON point
Lindeman, qui est fondamentalement frappant de dire
que sont les bibliothèques que vous
avez utilisé le gestionnaire de
bibliothèques clientes pour installer. Très bien, ça a l'air bien jusqu'à présent. Sachez que ce que je dois faire est savoir à toute
la mise en page qu' elle doit également inclure des ressources
Font Awesome. Dans la zone de tête où j'ai mis toutes mes feuilles de style
juste au-dessus du bootstrap. Je suis allé mettre dans la feuille de
style pour la police. Également. Où puis-je me procurer
cette feuille de style ? Il se trouve dans le dossier lib, le dossier Font Awesome, le dossier CSS. Et puis vous verrez que
tout point Min est un peu
effondré sur la dette. Donc, au lieu d'utiliser tout ce
que nous utilisons la version minifiée. Nous avons déjà discuté de
la différence entre la version unique
et la version minifiée, c'est pourquoi nous allons simplement le faire. Nous incluons donc ce
dossier juste là. Avec cette inclusion, je peux non, aller de l'avant et regarder
comment je peux utiliser mes icônes. Si je reviens sur le site Web et que je
regarde les exemples, cela me montrera à quoi ressemble
la syntaxe
et c'est vraiment simple. Tout ce dont nous avons besoin, c'est d'un marqueur I,
puis d'un cours avec FA. Et puis, si un tiret, quelle que soit l'icône
que nous recherchons. Nous avons dit que nous voulions
comme une poubelle pour la suppression. Activé. Voici un exemple pratique. Vous avez la balise d'ancrage, et ils n'ont pas
configuré la balise d'ancrage, vous avez cette icône. Alors, quel que soit le cas, c'est là
que vous obtenez cette icône
d'hôte à côté de la maison. Ce livre, nous avons dit bibliothèque, etc. Vous pouvez
donc être très créatif et utiliser ces icônes
comme bon vous semble. Voici donc quelque chose de
pratique que nous voyons ici,
nous avons la poubelle. Comment puis-je obtenir la poubelle ? D'accord, c'est poubelle. Je vais donc
juste emprunter ça. Passez à notre code. Ensuite, dans le bouton Supprimer
au lieu du mot supprimer, je ne veux que l'
icône pour la corbeille. Pour modifier. Peut-être que je veux seulement et
laissez-moi voir quel est le témoignage. Je pense donc que si je ne me trompe pas, l'intelligence commencera à remplir ou à remplir options basées sur le fait
que nous avons inclus le CSS. Que faire si je voulais éditer
un livre ? Laissez-moi voir s'il y a une modification. Modifier. Il y en a un explicitement à modifier. Et puis, pour plus de détails,
nous pouvons probablement utiliser quelque chose comme laissez-moi voir s'il y a quelque chose
pour plus de détails. Non, alors nous pouvons utiliser en vrac ou un vieux
tiret de livre ouvert. On y va. Parfois, vous
devez vous asseoir et explorer
les différentes idées d'icônes
ou les options. Ensuite, vous créez
le vôtre fonction de ce que vous
voulez transmettre à l'utilisateur. Je vais donc juste en prévisualiser
rapidement. Lorsque nous jetons un
coup d'œil, nous voyons que, d'accord, cela ressemble à une modification. C'est un livre ouvert. Je tiens. Mon utilisateur déduirait que ce sont les détails
plus regardés et que l'
icône de la corbeille n'apparaît pas. Donc, si je reviens, parfois aussi en fonction de la
version du
fichier Awesome que vous utilisez certains champs certaines classes
peuvent ne pas fonctionner. Donc comme un tiret de corbeille ou pourrait ne pas fonctionner mais
déchirer mon travail. Laissez-moi juste rafraîchir
ce changement. Et on y va. Nous allons donc améliorer notre
poubelle. Je vous montre juste
que ce sont des moyens que vous pouvez utiliser pour pimenter vos écrans si vous ne voulez pas vous
fier uniquement aux icônes,
car tout le monde ne peut pas simplement déduire ce que nous
Je veux qu'ils soient uniquement à
partir des icônes et vous pouvez toujours modifier l'icône de
texte, puis le mot modifier les détails et supprimer. Il ne faut pas dire que ce n'était pas très convivial
car vous ne
saviez pas ce que les
icônes MIT Boulder moins cela lui apporte cette
petite touche. Donc, même pour le bouton Créer, le lien créer,
je vais simplement copier ce que je balise. Et puis cela
crée un nouveau bot. En haut, je vais
voir s'il y a un signe plus ? Il y a un signe plus. Donc, si un tiret plus rafraîchir, et nous voyons cela plus les périodes d'
inscription. C'est ainsi que vous pouvez commencer
à faire apparaître le corrupteur sur
votre écran de votre application à l'aide de ces bibliothèques
tierces. Vous pouvez passer par là. vous mets au défi de
redessiner ces pages, me
mettre à l'honneur pour une liste un peu plus robuste dans les détails. Elle est la rédactrice en chef et l'
argent pour lister ici et nous aurons besoin est déjà de
faire ce qu'il doit faire. Vous pouvez y aller de l'avant et le faire. J'espère donc que vous avez relevé
ce défi et que vous êtes allé de l'avant et appliqué un peu
de créativité aux autres pages. Mais je vais vous
montrer ce que j'ai fait. Nous pouvons donc comparer les
notes lors de la modification. Tout
ce que j'ai fait, c'est de le rajouter à la liste. Notez maintenant que cette liste
ci-dessus est, elle est battue avec une bobine
primaire ou les deux. Il n'a ce regard que
lorsque je le survole. Cela a été facilement
réalisé en utilisant BTA et ligne de tiret, tiret primaire. Pour toutes les pages qui avaient l'argent nécessaire pour lister le
lien en bas, ce que j'ai fait a été de le déplacer
hors du DV, mettre dans la même div
que le bouton Soumettre, puis de lui donner le btn,
btn esquisse principale. Et tout le reste
est resté intact, mais je lui ai donné une icône flèche gauche. Même à ce moment-là, j'ai raté une occasion
ici avec la contribution. Ainsi, l'entrée n'est pas
placée dans cette icône. Dans l'entrée. Le bouton Enregistrer est juste une
entrée n'est pas une balise de bouton, c'est juste une balise d'entrée. Si je voulais mettre
quelque chose pour dire qu'il est enregistré et que je ne
pouvais pas utiliser l'entrée. Ce que je devrais
faire, c'est utiliser le bouton. Je suis venu vous montrer
ce que j'ai fait et je remarque que si j'
avais plus de place pour des améliorations, je peux
rencontrer ce bouton et
vous donner l'avertissement de classe btn,
btn dash. Et puis les boutons
peuvent prendre un type. Et celui-ci serait un bouton
Soumettre. C'est très bien. Mais pour son icône, voyons quelle icône
je pourrais utiliser ici. Si c'est, y a-t-il une sauvegarde, ok, si j'économise et je pense
que ça va nous
donner disquette, cette icône. Donc, après avoir effectué ces modifications, je me retrouve avec ce
bouton d'enregistrement par rapport aux entrées. Je
vous montre donc comment utiliser différentes balises pour réaliser
la même fonctionnalité. Je peux donc maintenant supprimer cette balise
d'entrée ou cette entrée. Oui et non. Je n'ai que cette sauvegarde avec une
icône ou au-dessus à répertorier. Encore une fois, cette
petite animation survolée est réalisée simplement
en manquant BTN
, le tableau de bord, puis vous avez le même
avertissement principal, le même danger, etc. J'étais dans un processus. Je vous
verrai dans le fait que chaque page qui avait le lien « buck to list », tout ce que j'ai fait était de le déplacer
dans le même groupe de formulaires que
le bouton de soumission. Il s'agit donc de la
page de mise à jour de la page Créer. J'ai fait la même chose pour
pouvoir rencontrer le même type de modification ici avec
le bouton Créer. Je vais juste le faire
pendant que nous sommes tous ici. Pris ce bouton et
c'est presque aussi simple que copie NPS ne sera que la
différence
serait que ce serait primaire. Ou je peux en faire
quelque chose comme succès parce que c'est un Create, donc c'est du succès, de la création. Et ensuite, il peut également avoir
l'icône de sauvegarde. Je pourrais voir s'il y a autre
chose que je pourrais utiliser. Je ne peux penser à rien d'
autre ce moment, alors je vais simplement
le laisser avec Enregistrer, la page Créer. Découpez la liste deux et
je clique sur Créer un nouveau, j'obtiens ce bouton vert. Cet argent à lister. Ok, alors pour ma page de détails où j'ai eu la modification et le retour
à la liste des mêmes principes. Il s'agit donc du
même bouton
provenant de la
page d'index de l'édition. Et puis c'est la
même liste de compartiments que celle que nous avons utilisée. Non, il y a une petite différence
syntaxique dans le discours des détails où l'ID d'itinéraire ASP est bien sûr l'
ID de point de voiture
model.py. C'est donc une différence
entre ce qui aurait été et ce que j'ai dû
taper ce qui se trouvait sur la page d'index plutôt
que ce qui doit se trouver sur cette page. Sinon. Nous commençons maintenant à voir comment ajouter un peu caractère
à notre application. Maintenant que nous savons comment
intégrer des bibliothèques tierces, la dernière chose que nous
allons faire est d'utiliser des alertes
douces pour gérer
la confirmation la suppression au lieu
du script Java standard invite que nous utilisons
actuellement. Première étape, laissez-nous trouver
notre bibliothèque d'alertes douces. Cliquez à nouveau avec le bouton droit sur www root,
ajoutez une bibliothèque côté client. Et je vais juste taper des alertes
sucrées là où
ça apparaît. Je vais juste aller de
l'avant et inclure ça. Et puis, une fois de plus, je
change de lieu. Je voulais dub, dub, dub ou root slash lib
slash sweet alert. Allez-y et cliquez sur Installer. Il mettra à jour le
gestionnaire de bibliothèque ou un fichier lib man. Nous savons maintenant quelle
bibliothèque supplémentaire a été ajoutée, mais nous obtenons également les fichiers ou le fichier
ajoutés au projet. Sachez que c'est en place. Passons à
notre fichier de mise en page et
incluons le script. Donc, la raison
pour laquelle nous allons l'inclure dans la mise page
et non dans la page
ou, vous savez, exactement où cela si nous le
voulons à plusieurs endroits, alors vous devrez répéter
cette inclusion partout, ce que je ne veux pas nécessairement. Je vais donc simplement
inclure la menace
au-dessus du SIG du site. Je vais simplement ajouter cette balise de
script où le SRC est égal. Je saurai que c'est dans la
barre oblique de lib. Tout cela était en dessous par
intelligence. Joli et propre. C'est-à-dire que non, nous pouvons accéder à cette bibliothèque d'alertes douces depuis n'importe où dans notre application. Vous pouvez le souhaiter sur
différentes pages. Lorsque vous avez des fichiers d'index
différents, vous souhaitez disposer du même
type de fonctionnalité de suppression. Vous pouvez, vous pouvez
le faire partout. Lorsque je retourne sur
ma page d'index, je dois configurer une
section pour un script. Maintenant, c'est quelque chose
que nous avons déjà vu car sur notre page Créer, il s'agissait de leur section consacrée
aux scripts. Permettez-moi donc de vous donner un
aperçu de ce que cette section est dans laquelle je
peux la mettre en évidence. D'accord, nous voulions inclure
les scripts et ainsi de suite, mais je n'ai pas tout à fait expliqué pourquoi la section est là et nous
n'avons pas seulement inclus les scripts. En revenant à notre ancienne page d'
allèle, vous remarquerez que vous
avez différentes sections, vous avez
donc le type de données de vue. Nous avons déjà établi à
quoi cela sert. Nous avons également le corps de rendu. Nous avons déjà établi
que c'est là que tout le contenu à l'intérieur de nos vues sera rendu à l'intérieur de l'ensemble de la mise en page plus tard, non, vous verrez que vous avez
également une section qui dit section de rendu
appelée scripts, et ce n'est pas obligatoire. Cela permet que chaque fois que
nous voulons mettre un script, nous pouvons invoquer cette section, en mettant ce
script jQuery
JavaScript personnalisé ou quoi que ce soit. Et quand la
page dans son ensemble est rendue, cette zone de script
serait rendue en dessous tout le reste ou par rapport à sa position
dans la pièce Leo, c'est là
qu'elle
sera rendue. C'est important car
rappelez-vous que je
parle de dépendances. Jquery, alors bootstrap
a une dépendance à jQuery. Cela signifie que je ne peux pas placer
l'inclusion bootstrap ou la référence d'écriture
au-dessus de jQuery car ce que Bootstrap doit faire ne
sera pas disponible car
jQuery n'était pas disponible. Tout comme avec la douce alerte. Je ne peux pas appeler cela une
alerte douce si je n'ai pas déjà
la bibliothèque d'alerte douce disponible au moment où
j'écris mon code. Bien que nous ayons besoin de nous
assurer que tous nos scripts
sont nécessaires à tous les niveaux,
le tout page et ensuite
dans nos vues chaque fois que nous avons besoin d'un script ou que nous avons
référencé un autre script personnalisé, nous nous assurons qu'il
le place dans la section. Pour revenir à
l'un des forums existants, il raisonnable de faire
les scripts de validation est
que
les scripts de validation sont à que
les scripts de validation sont fois des bibliothèques liées à jQuery. Nous appellerons la fonctionnalité
jQuery
avant que le fichier jQuery n'existe. Il le place dans cette
section de sorte que lorsque toute la page de mise en page soit rendue avec tous
les scripts et le
roman, etc. Jquery est déjà sur la page. Ainsi, au moment du chargement du formulaire, les scripts de validation jQuery se chargent après jQuery. Dans notre cas, nous voulons nous
assurer que nous appelons notre code d'
alerte douce après les bibliothèques Sweet Alert
ne soient pas dans une section scientifique
à
laquelle je suis allé. Voyez, je voulais ouvrir et fermer
la section scripts. Ensuite, ici, je peux commencer à écrire mon propre JavaScript personnalisé ou
jQuery ou ce que je veux. Dans ce cas, j'ai besoin d'un événement jQuery
pour surveiller quand le formulaire
est envoyé. Très bien,
lisons ça ensemble. Voyons si ça va
marcher, mais je vais juste vous expliquer ce que je
fais et nous pourrons y
remédier au fur et à mesure. Donc, signe dollar,
nous utilisons jQuery. Une fois de plus, je ne peux pas
utiliser de code jQuery tant que la bibliothèque jQuery
n'existe pas déjà et n'a pas été appelée. Je vais juste au signe du dollar C. Placez cette fonction fonction globale
point ouvert et fermé, accolade point-virgule. Et puis à l'intérieur de
cette fonction ou je peux commencer à écrire
mon code personnalisé. Donc, le dollar signe, et je
cherche une soumission de formulaire. Donc, je vais juste
dire le formulaire de soumission. Donc, lors d'une soumission de formulaire, nous voulons que le téléphone soit Shun. Et je suis allé vous donner
un paramètre appelé E. Donc E est comme un argument d'
événement à voir, eh bien, je représente l'événement
qui va se produire. Vous essayez donc de
soumettre le formulaire. E possède les informations nécessaires pour tout ce qui
va se passer. La première chose que je
voulais faire est de lui dire point
E empêche le défaut car l'opération par défaut d'une soumission de
formulaire est de soumettre. Je voulais faire une pause
parce que je suis sur le point de
demander, êtes-vous sûr ? Très bien. Alors le bouton
se souvient que nous plaisons ce truc non cliqué
avec les alertes douces. Donc, vous cliquez sur le bouton, je veux suspendre le comportement par défaut de
la soumission du formulaire. Et puis je vais voir Swale, ce qui est mes alertes douces, alors qu'il n'y a pas d'alertes douces. Au lieu de ces accolades ouvertes. Et puis je vais,
juste, dans JavaScript,
l'indice de code n'
est pas
aussi puissant que HTML, CSS et C-sharp. Ce que j'ai essayé de
faire, c'est quand j'ouvre quelque chose qui se ferme en même
temps et que j'ai mis le point-virgule, donc je ne l'oublie pas plus tard. Swale prend quelques
arguments et, si vous le souhaitez, vous pouvez consulter la documentation sur les
alertes douces. Il est toujours bon de
regarder le document. Donc, quand vous n'êtes pas sûr, mais pour l'instant, je vais continuer et nous allons le
regarder ici. Alors je suis allé voir, êtes-vous sûr ? C'est le titre de l'invite ? Côme ? Ensuite, nous avons le texte, qui sera le message réel que la personne va voir, c'est ce que je vais
voir comme ce que nous avions auparavant. Voulez-vous vraiment
supprimer cet enregistrement ? Je vais voir l'icône. Icone met en garde, elle sait
donc que c'est un moment très sérieux. Je vais dire que les
boutons sont égaux à vrai. Donc, les alertes douces peuvent
vraiment être comme un pop-up pour
dire, d'accord, c'est arrivé. Vous cliquez dessus et dites, OK, lorsque vous dites des boutons, cependant, par défaut, va vous
donner l'archaea et annuler une sorte d'invite comme
ce que nous avons vu avec l'onclick. Ensuite, nous voyons également qu'un mode
danger est vrai. Remarquez que chaque ligne se termine par une virgule car elle ressemble à un bâtiment ou
à l'objet entier. Notez que nous avons l'objet d'alerte
douce Bill nous a dit que nous devons continuer
à voir. Ensuite. La partie alors
sera comme les notes d'un délégué à voir, surveiller l'entrée
de l'utilisateur. Les entrées seront stockées dans
n'importe quelle variable que nous mettons en place. Confirmez donc. Je le vois alors surveiller
pour confirmer. Si je clique sur OK. La confirmation est vraie. Si je clique sur Annuler, puis
a confirmé son faux. C'est à peu près ce que c'est. Et nous faisons le même genre d'expression
lambda à cet égard. Il s'agit donc d'une
fonction déléguée où nous ne
faisons qu' une fonction à la volée pour voir puis continuer le dysfonctionnement par rapport à
la variable confirmation. Je vois si je confirme. Que voulons-nous
faire s'il est confirmé ? Donc, si confirmer, c'est de
voir si cette valeur est vraie, s'ils ont dit : OK, alors que voulons-nous faire ? Que dois-je faire ? S'ils ont dit qu'ils confirment, je voulais dire que
ce point se soumettait. Je mets en pause le comportement
par défaut, mais je vois, ok,
eh bien, allez-y et soumettez-vous. S'ils ont dit oui, disons cela pour un tour. Très bien, je suis donc
allé de l'avant et j'ai ajouté des enregistrements supplémentaires
pour que nous puissions tester. Donc je vais juste dire
supprimer et oh, snap, je n'ai pas supprimé l'invite
d'origine, mais laissez-moi simplement cliquer sur
OK et continuer. Et puis vous voyez ici l'alerte de
nos suites. Regarde, oh, c'est sympa. Ça a l'air. Vous êtes sûr de cette
jolie petite icône ? Dis juste que tu sais que le danger est à venir. Voulez-vous vraiment
supprimer cet enregistrement ? Si je clique sur OK. Ok, c'est toujours une incitation, donc nous devons le mettre un peu plus drôle pour que je sache
exactement ce qui se passe. Ce qui se passe, c'est que chacun de ces
boutons de suppression est un formulaire. Lorsque vous cliquez sur Supprimer, tous les formulaires sont
affichés, la page. Et c'est pourquoi cette invite arrive plusieurs fois. Donc, pas de problème, nous explorons ce qui doit être
mis en place pour que cette
chose fonctionne correctement. Donc, tout d'abord, le voisin
déplace ce surclic. Maintenant que nous avons
les alertes douces, nous n'avons pas besoin de cette invite des paramètres par défaut
du navigateur. Nous savons que nous disposons d'une interface
plus propre pour utiliser une
méthode alternative à l'impression formulaire par conférence
qui, selon moi, l'impression d' un
formulaire pour chaque bouton
serait difficile. Ensuite, nous regarderons
sur le bouton, s'il vous plaît. Je ne fais que
vous montrer toutes vos options. Nous avons donc vu que cela fonctionne avec
l'invite par défaut, et si vous êtes à l'aise
avec cela, aucun problème. Mais parfois,
lorsque vous commencez à
travailler dans d'autres bibliothèques, commence à devoir faire des compromis en cours de route
avec l'ensemble de votre conception. Très bien. Travaillons à combiner
nos connaissances sur la façon dont les
formulaires fonctionnent en attente, l' affichage fonctionne sur toutes
les données nécessaires avant
que la
soumission puisse avoir lieu. Ce que je veux faire, c'est
créer une instance de la batterie au lieu d'avoir trois enregistrements et trois forums
différents, je veux avoir oui, mini boutons de suppression comme le disent
plusieurs boutons Supprimer,
il y a des enregistrements, mais nous allons
utiliser un formulaire pour exécuter la commande delete a. Je vais prendre cette
forme et je vais placer sous
la table tout seul. Je ne fais que couper les
étiquettes de formulaire et
les mettre tout seul. Je suis allé supprimer cet
identifiant de voiture racine. Et au lieu de cela, je vais lui
donner une contribution, comme ce que nous avons vu dans
l'origine ou la suppression. Sous forme de plomb d'originalité. Nous avions une forme au
bas du terrain. Nous l'avions caché, donc je vais
juste le copier pour que nous ayons un
point de référence. Le type d'entrée est masqué, avant que nous n'ayons aucune propriété ou quoi que ce soit
dans le modèle appelé voiture. Je ne vois pas d'identifiant automatique de carte
pour l'ASP je vais juste
lui donner un nom. Le nom ici est le numéro d'identification de la voiture. Quelle est la
pertinence du nom ? Quand nous avons un formulaire ? N'importe quel formulaire ? Rappelez-vous que lorsque nous avons
fait la page HTML de base, nous avons doublé le nom
et, à cause du nom, vous avez vu les choses se
passer dans l'URL. C'est le même principe,
sauf ASP dash quatre s'occupe du
nom et de l'ID pour o. Vous remarquerez
donc que
nos balises d'entrée ici, nous n'avions pas besoin de voir le
genou suffiraient à voir l'ID de tout ce que nous avons à voir. comme entrées et définissez la classe et l'outil ASP dash for bone did, le nom de
la propriété du nom du modèle
remplacerait le tiret ASP quatre. Donc, vraiment et vraiment,
ce qui est imprimé est id correspond au nom du point de voiture, nom correspond au nom du point de la voiture. Nous pouvons donner manuellement notre
propre tag, son propre nom, qui correspondrait avec le même ID d'itinéraire que celui que nous avions ou le même paramètre d'itinéraire que la méthode post
attend de voir l'ID de voiture ici. Idées de voiture et je
vais aussi vous donner l'identifiant, l'identifiant voiture afin que nous puissions
y accéder via jQuery. C'est donc notre forme. Il n'a même pas besoin
d'un bouton d'envoi car nous avons le bouton ici. Nous devons cependant connaître l'ID du bouton sur
lequel vous cliquez. Je vais donc ajouter
un autre attribut de données. Encore une fois, nous
ne faisons qu'explorer tous
les compromis et toutes les choses sympas
que nous pouvons mettre en place. Il existe un attribut
que nous pouvons placer sur le bouton Data Dash ID. Ensuite, nous pouvons vous donner la
même valeur d'article, ID de point. Sachez que les liens ont leur
ID et
que chaque bouton qui va doubler en
tant que bouton d'envoi
aura son propre identifiant. Non, nous devons surveiller clic sur
un bouton au lieu
d'une clique de formulaire. Pour cela, je peux facilement dire, donnez-lui une
classe personnalisée, supprimez btn. Ainsi, chaque bouton de suppression sera identifié comme delete btn
à l'intérieur de mon jQuery. Au lieu de regarder une soumission
complète de formulaire, je peux savoir dire Dot Delete btn. Surveillez donc un événement de clic sur n'importe quel élément dont
la classe supprime btn. Vous voyez donc comment tout cela va
se réunir. Chaque fois que vous cliquez sur ce bouton, il n'y a pas de valeur par défaut. Je n'ai pas à
prévenir les défauts, donc je vais simplement
supprimer ça. Vous montre encore une fois le contexte. Pourquoi écrivons-nous le code sur
les différentes circonstances ? n'y a donc aucun formulaire
à soumettre. Je n'ai pas à empêcher le comportement par défaut
d'un clic de suppression btn. Cependant, ce que je
dois faire est rapide, ce qui va toujours se produire. Ensuite, s'ils confirment, ce que je vais faire,
c'est que
je dois lui donner une pièce d'identité pour pouvoir l'identifier. Ainsi, chaque fois que nous avons besoin
d'identifier un élément dans
JavaScript ou jQuery, nous pouvons utiliser la classe
ou utiliser l'ID. Il s'agit donc d'un formulaire de suppression. Je vais en voir une
que la valeur que l'entrée doit obtenir
doit provenir de l'ID de données du
bouton sur lequel on a cliqué. Permettez-moi donc
de faire tout cela étape par étape. Tout d'abord, prenons les boutons. Je peux donc dire que var btn est
égal au signe du dollar. Ceci. C'est moi
qui dis que c'est là l'élément. Il s'agit d'un objet
qui
représente les éléments qui
ont déclenché l'événement. C'est l'étape numéro un, outil. Var id est égal à et puis je peux obtenir l'ID à partir
des données btn point. La raison pour laquelle j'ai utilisé des
identifiants de tiret de données qui interrogent, vous pouvez facilement vous lier à cet
élément de données et obtenir cette clé. Obtenez la valeur en fonction de la clé. Je vois des données btn points, puis j'obtiens la valeur qui est stockée
avec l'ID de clé. Et maintenant, nous avons l'ID ou identifiant
de la voiture qui correspond à
un bouton sur lequel on a cliqué. Sachez qu'après avoir tout cela, je suis allé définir la valeur
des éléments cachés. Donc le dollar signe des guillemets, hashtag et son identifiant de voiture dot val. Et puis je vais juste vous
donner la pièce d'identité. Sachez que la valeur de ce
caché sera définie n'importe quel ID sur
le bouton Supprimer. Ensuite, après avoir fait tout cela, je peux maintenant voir le
hashtag du signe dollar, supprimer le formulaire. Vous utilisez le hashtag pour
ID comme avec css, hashtag
de classe complète ou
livre ou le numéro
indiquant pour les identifiants. Je vais donc opter pour
le formulaire de suppression par ID jusqu'à ce qu'il aille de l'
avant et le soumettra. Allez-y et
exécutez votre comportement par défaut après avoir configuré
vos données pour vous. Disons donc celui-ci, cette version pour un tour. Nous pouvons cliquer sur Supprimer, nous recevons notre invite, nous cliquons sur
OK, et regardons cela. Ça marche, non ? Donc, tout ce que nous avons fait était
en arrière-plan. Une fois de plus, nous avons
créé une balise de formulaire. Donc, même si vous inspectez l'élément, vous le remarquez au
bas de la table. Nous avons donc du corps et laissez-moi entrer dans la
div, c'est un conteneur. Ensuite, nous avons le
tableau et ensuite nous avons notre formulaire C. Ce n'est pas une
différence sur la page. Il ne semble pas que nous ayons
été visibles lorsqu'il était attaché à
chaque bouton, mais non,
ce n' est qu'un seul formulaire sur la page, n'y a
donc aucune confusion quant au formulaire sur
lequel on clique, lorsqu'il était attaché à
chaque bouton, mais non,
ce n'est qu'un seul formulaire sur la page, il n'y a
donc aucune confusion quant au formulaire sur
lequel on clique,
bouton qui, pour moi,
essaie d'être soumis. n'y a plus de confusion. Il n'y a qu'un seul formulaire. Ensuite, si vous
regardez chaque bouton, vous verrez que l'ID du tiret de données a l'ID correspondant
à tous les autres liens. C'est donc la pièce d'identité cinq. Quand on clique dessus, on obtient le bouton sur
lequel on a cliqué. Nous obtenons l'identifiant , puis nous le définissons sur
l'élément caché. Ensuite, nous allons de l'avant et soumettons. Ensuite, le formulaire
sait qu'il doit aller dans le gestionnaire de suppression
avec une méthode de messages et il transmet la valeur cachée appelée ID de voiture. Une fois que tout cela est en place, vous accéderez à la suppression lors de la publication avec l'ID d'itinéraire prévu. Et ce que nous savons, c'est
censé faire tout cela, toutes ces améliorations
chaque fois que nous mettons dans des bibliothèques tierces et
que nous voulons les utiliser, vous savez, nous devons prendre ce genre de conception. prendre des décisions au fur parce que vous pouvez penser que
cela fonctionnera ou que cela peut fonctionner dans une situation particulière. Mais lorsque vous ajoutez
d'autres codes et bibliothèques, vous devrez peut-être ajouter un
peu plus de fun. Il suffit de modifier votre
refacteur de code au fur et à mesure. C'est donc tout pour cette activité. voit dans la prochaine leçon.
15. Ajouter des changements à GitHub: Très bien, les gars, bienvenue. Cette leçon
va être courte. Tout ce que nous allons
faire dans celui-ci c'est vérifier les changements d'ordre. Nous avons donc commencé à utiliser
GitHub quelque temps. Et ce que nous avons fait, c'est de
vérifier nos initiales, lorsque nous sommes arrivés à un
certain jalon, nous avons vérifié tous
nos changements. Nous voulions le refaire. Les coches rouges indiquent
les fichiers en attente, les modifications ou les modifications. Les avantages verts représentent ceux qui ont
été modifiés et les cadenas bleus
représentent essentiellement ceux qui n'
ont pas changé. Tout ce que nous avons à faire, c'est
d'obtenir des changements. Une fois de plus, si vous ne voyez pas
où il se trouve sur mon écran, vous pouvez toujours accéder à Afficher
et cliquer sur Obtenir les modifications. Ensuite, ce paquet vous montrera tous les fichiers qui ont
été ajoutés en solo pour les bibliothèques tierces
que nous avons ajoutées sont tous là. Et notre fichier
de migration et/ou nos fichiers d'entités. Je vais donc simplement
donner un message rapide. Bien que le message n'ait pas
besoin d'être un essai, j'aime généralement être
aussi descriptif que possible dans mon message
afin que quiconque lit obtiendra
l'essentiel de ce que je fais dans cette
version, à savoir s'engager. Après cela, je peux simplement
dire tout engager et couler. Une fois que ce gamète est terminé
avec succès, ce message s'affiche. Et quand nous revenons
à l'Explorateur de solutions, tout
aurait des cadenas bleus. Lorsque nous reviendrons, nous commencerons à étendre un peu plus notre
application.
16. Gérer les changements de base à l'aide de la structure d'entité: Dans cette leçon, nous
allons configurer nos autres entités
pour cette application. En ce moment, ce que nous avons,
c'est la voiture, ce qui est essentiel. Tout ce que nous avons
pour la voiture serait l'année et le
nom de la voiture. Sachez que si vous êtes en voiture depuis assez longtemps, vous savez qu'il ne s'agit pas seulement d'une carte de visite, d' une combinaison d'une douce
et d'un modèle, n'est-ce pas ? Le doux serait donc la marque
de la voiture comme Nissan
ou Lamborghini. Et le
modèle serait calqué sur cette marque,
est-ce que nous avons affaire ? Ce que nous voulons faire, c'est apporter
des modifications à la base de données ici. Et ce que nous devons sacrifier c'est le nom et le diviser
en marque et modèle. À ce stade, vous
vouliez prendre en certaines
considérations de conception, car il est assez facile à voir. Ok, je voulais changer cela pour moi et nous allons juste dupliquer
cela et rencontrer ce modèle. Et il sera assez facile
d'avoir juste une ficelle. Mais réfléchissez à ceci lorsque quelqu'
un entre dans une voiture dans votre système, voulez-vous nécessairement qu' il tape le lait
et qu'il tape dans le modèle ? Que se passe-t-il si vous possédez deux véhicules du même type de Mecque et de
modèles ? Que voulez-vous qu'
ils saisissent
le mot Suzuki à chaque fois ? Parce que peut-être le vote de
congé ou l'erreur, un des SAT
le marque ou vice versa. Le fait est
qu'à ce moment-là, vous souhaitez
limiter la possibilité d'erreur humaine lors prise de données via
notre interface utilisateur. Bien qu'il ne s'agisse pas d'une décision d'
interface utilisateur, ce que nous faisons ici
influencera notre conception ou notre interface utilisateur. De manière générale, dans un formulaire où des données
doivent être répétées, vous utiliserez une liste déroulante, ce qui
signifie que vous
disposerez d'une liste déroulante contenant toutes les options
potentielles. Vous ne laisseriez pas à l'utilisateur
habituel pouvoir simplement dire, oh, voici la valeur et
tapez-la manuellement. Pour moi, je peux modéliser, je me sens plus à l'aise
ou du moins pour MEK, ce qui serait les
marques parce que c'est
plus acide que le modèle parce différentes marques de
différents modèles et combinaisons 0 pour qu'ils
puissent taper dans le modèle, mais pour le micro, personnellement, quelques plus à l'aise leur
donnant une liste des marques potentielles. Si ce n'est pas dans la liste,
nous pouvons l'ajouter à la liste, mais il vaut mieux qu'ils
aient cette liste. Et ils peuvent saisir
le modèle par rapport à ce
qu'ils ont choisi dans la liste. Cela va nous obliger à apporter
des modifications clés à la base de données. Parce que si j'ai besoin d'une liste de micro, je ne peux pas voir la corde se rencontrer. Maintenant, ce que nous allons
commencer à parler de ce que nous
appelons clés étrangères
et primaires. Nous savons donc déjà qu'
ils sont les deux clés primaires. Très bien, mais maintenant nous avons besoin d'
une autre table et nous avons besoin d'une clé étrangère pour que cette
table soit présente en voiture. Créons donc cette nouvelle table. Donc les migrations, désolé, rien de migrations dans
le projet de données, je suis allé ajouter une nouvelle classe, et je vais appeler
cette classe le micro. Rappelez-vous que
ces lunettes ne sont que des
modèles pour ce qu'une table avec une queue sera programmée sur les propriétés de ce que nous
voulions stocker notre tension. Alors, que voudrions-nous
stocker les deux douces ? Tout d'abord, nous avons toujours
notre identifiant public int puis nous aurions
le nom prop, top tub, chaîne de noms. Nom ici signifie simplement nom comme dans la valeur de chaîne qui correspond à la moyenne dans la table appelée micro. Faire le numéro un pourrait être Nissan, faire que le numéro deux pourrait
être Toyota, etc. Donc c'est vraiment ce que le
nom ici représente. Si vous vouliez aller
dire « Make me personnellement », je ne respecte pas cette
convention de dénomination. Certaines personnes le font. Je ne le fais pas parce que je suis déjà
dans la table appelée micro, donc je n'ai pas besoin de
me voir le nom évidemment, nom serait le nom de valeur
que je mets
dans cette table, n'est-ce pas ? Maintenant, nous avons la
table principale, c'est très bien. Je dois faire
savoir aux contextes
de la base de données qu'il y a une
nouvelle table en ton. Je viens de passer à la
ligne Control D juste pour dupliquer
les parties dures. Mais je suis allé appeler ce mélange. Je pourrais aussi appeler
cette voiture, ce qui
n' a pas vraiment d'importance sur
ce que j'appelle la table. Mais j'aime vraiment
être cohérent avec le nom de l'entité et
le nom de la table, car vous ne le voyez pas
avec la voiture et les voitures. Mais encore une fois, vous n'aimerez peut-être
pas nécessairement ma convention de dénomination et vous
voulez, bien que l'un, alors, pas de problème si vous vouliez nommer ce micro de
voiture et ce mix de voiture ou si vous avez l'
entité appelée Mika, ce qu'on appelle la voiture mixte
et c'est très bien. J'aime les garder
cohérentes car cela entraîne moins d'erreurs
en bas de ligne. Nous avons maintenant une nouvelle table. Ce que je dois faire, c'est laisser charnel qu'il devrait être
quatre ou qu'il devrait avoir une clé étrangère à faire. Entity Framework rend
les clés étrangères très faciles pour nous. Ce que je vais faire est correct, je vais laisser ce
message de validation pour le modèle. C'est très bien. Mais en dessous de tout ça, je vais mettre une autre
propriété, int make ID. Je faisais remarquer
qu'Entity Framework, il est plus facile pour nous
d'introduire des clés étrangères. Parce que lorsque nous disons
que nous voulons un nom et un ID de table, cela
déduira automatiquement que nous voulons une clé étrangère. C'est donc au moins la première étape. Il le fait en disant int micro
ID, il saura que, d'accord, j'ai une entité appelée Mek, et elle a un ID,
donc la combinaison signifie
qu'il
doit y avoir donc la combinaison signifie une clé étrangère. Une autre partie de cela
consiste cependant à ajouter nos propriétés
de navigation. Donc on dirait que Make me,
cette propriété de navigation dit
essentiellement que si je reçois une voiture et que je voulais
connaître le micro de la voiture, les noms de
marque sont vraiment
stockés dans la table de fabrication. Donc tout ce que je
dois vraiment descendre, c'est cette voiture
ABA et elle a fait ID1. Je ne sais pas quel
est son nom, juste à partir de la table de la voiture. Très bien. Donc, si vous êtes habitué aux bases de données, vous saurez ce que je
veux dire lorsque vous regardez dans la table de la voiture ou quand il
s'agit de clés étrangères, tout ce que vous voyez, c'est que les valeurs d'
ID peuvent causer ID1, puis le micro ID 1. Il est déjà entré dans l'ID de marque C. Nous ne connaissons pas les détails. Par conséquent, en ajoutant cette propriété
et de manière générale, nous l'ajoutons en tant que virtuelle afin qu'elle puisse être remplacée si nécessaire. Vous pouvez donc simplement aller de
l'avant et le faire. Mais lorsque nous ajoutons cette propriété de
navigation, lorsque je récupère une voiture, je peux dire s'il vous plaît
inclure tous les détails de cette table supplémentaire
ou de cette table associée. Ensuite, je peux apporter
la propriété micro avec tous les détails. Quels que soient les détails qui me sont parvenus, je n'ai
peut-être même pas pu
mettre quelque chose pour voir quel pays est le micro. Disons que si je voulais être créatif, je dirais que cette marque
vient de ce pays. Et puis je
rencontrerais le même genre de problème de qualité des données ici si je
quittais le pays volontairement, parce que quelque chose des
États-Unis d'Amérique pourrait être écrit comme
États-Unis d'une bourse, USC comme une autre personne, groupe
américain
sur la personne,
etc. C'est pourquoi chaque fois que vous avez quelque chose que
vous voulez contrôler, vous voudrez le
mettre dans sa propre table puis créer une
clé étrangère référence à ce sujet. Je ne vais pas être trop
compliqué pour l'instant. Examinons deux tables et nous introduisons
ce concept de clé étrangère. À ce stade, la voiture sait qu'elle devrait
avoir une clé étrangère à la table où la navigation ou a affirmé la
validation des modèles. C'est donc nécessaire. Je vais également
exiger que l'identifiant soit saisi l'année. Nous pouvons avoir besoin d'un
an si nous le voulons. Nous pourrions également passer plus
de validation sur ces deux seringues. Minimum, minimum pour l'année. Supposons que nous ne voulons rien moins que les années 1990 dans les systèmes. Tout ce qui est en date de 191990 ou
avant 1990 n'est pas applicable. Et puis maximum,
mettons-le à 2021. Nous sommes en 2021. Je ne fais que
vous montrer la portée. La validation fonctionne vraiment. Laissez-moi espacer la mosaïque peut
tout voir dans son propre espace. N'oubliez pas que toutes
ces annotations, toutes ces choses doivent
simuler la base de données
pour affecter l' étape numéro un de la base de données, ou après avoir effectué ces modifications, l'étape suivante consisterait
à ajouter un migration. J'ai toujours mes commandes de
migration de la dernière migration ou du dernier ensemble d'activités
liées à la base de données. Nous nous sommes souvenus d'une ville, un projet par défaut
du projet de données. Et il peut appuyer vers le haut pour obtenir
les commandes précédentes. Je suis juste en train d'appuyer pour
obtenir la migration d'ajout. Je vais juste changer un manque. J'ai donc mixé la table, appuyé sur Entrée et mon champ de génération. Pourquoi ai-je échoué ? Eh bien, c'est parce que j'ai
supprimé le nom et le nom étaient
très utilisés dans d'autres parties
de mon application. Si vous codez pendant ce temps, c'est l'une des
conséquences de la refactorisation sur l'application
Ricci et quelque chose que vous pourriez avoir
un effet d'ondulation dans le reste
de votre application. Donc, gardons cela simple. Tout d'abord, nous avons institué le formulaire de
suppression, etc. Donc je n'ai vraiment pas
besoin de la vue de suppression et de ce code HTML CSS de suppression. Donc, ce que je vais
faire, c'est simplement supprimer , supprimer du carburant. Je n'ai pas besoin de celui-là. Très bien pour la création. Ce que je dois faire, c'est juste au moins de
commenter temporairement la zone. Ainsi, partout où
la propriété name a été accédée dans
n'importe laquelle de vos vues, vous pouvez simplement aller de
l'avant et la trouver. On l'utilisait ici, venait dans des fourre-tout,
en totaux ici. Donc non, à moins qu'il
apparaisse dans la liste. La mise à jour était également
utilisée ici sous la forme que vous pouvez simplement vérifier votre liste d'erreurs juste pour voir
où vous avez peut-être manqué. Et je vais faire Control Shift et B pour
faire un construit juste pour recompiler et voir
s'
il y a une erreur
et qu'il n'y en a pas. Essayons donc à nouveau avec la console
Package Manager. En audibilité réussie
et nous avons notre migration. Ce qu'il y a dans notre migration
va renommer la colonne
de nom en modèle. Très bien, donc ce n'est
que parce que nous avons changé la propriété
va la voir comme je renomme plutôt que supprimée. Très bien, pour nos sièges Meek ID qui
ajoutent la colonne, c'est un int. Il n'est pas disponible, et
la valeur par défaut est 0. Même si nous serions assis
trois pouces pour être en 19192021. Cela signifie donc que même dans ce cas, il ne devrait jamais y avoir ce feu lorsque la base de données
devra définir la valeur par défaut sur 0 car le client a dit que nous effectuerons
toujours la validation. Nous avons déjà vu que c'est arrivé. Ensuite, il va
créer une table appelée mix avec deux nouvelles colonnes, lui donnant la clé primaire. Et ensuite, regardez cette partie. Il crée un index. Un index dans une base de données
est une recherche à grande vitesse. Donc, chaque fois que nous
attendons avec impatience que
les voitures utilisent les idées de fabrication sont essentielles ou que
nous l'utilisons pour dire, donnez-moi toutes les voitures
avec cette pièce d'identité unique. En créant cet
index sur cette colonne, il le fera très rapidement. Nous ajoutons également la contrainte de clé
étrangère. Il indique ajouter une
clé étrangère dans les wagons de table, l'ID du micro de colonne
où la table principale est mixée et le principe
de l'ID des colonnes. En d'autres termes, une
clé étrangère signifie que rendre l'ID stable dans la voiture ne peut jamais
obtenir une valeur qui n'est pas disponible dans la table de mixage. Je ne peux pas ajouter une voiture qui
n'est pas de type ou qui n'est pas dans
la table mixte. Si c'est dans le tableau mixte, j'ai trouvé que vous avez trois icônes. Ajoutez une voiture avec ID TIN. Je mets juste une
voiture qui n'est pas présente. C'est donc une sorte de protection. C'est pourquoi vous appelez cela l'intégrité des données lorsque vous
parlez de conception de base de données une et
que vous préservez cette intégrité grâce à la conception de
votre application. Ainsi, entre tous
ces éléments et les validations, l'intégrité des données
sera maintenue. Encore une fois, la méthode du dôme
est essentiellement le démontage. Donc, si nous devons
annuler la migration, est
ce qu'elle fera pour abroger les changements
qui auraient été apportés. Et après avoir fait tout cela, revenons en arrière et mettons
à jour la base de données. Donc cette base de données de bits d'exécution et la console Package Manager, nulle part voir des
flèches ne posent aucun problème. Voyons donc
ces flèches. Il constate qu'il n'a pas réussi à exécuter la commande Alter où elle ajoute la référence à
la table de mixage de clés étrangères. C'est donc dans ce mix qu'il y
a un ID de colonne. Et en un mot, sans, le fait est que ces flèches ont tendance à paraître très compliquées. Si
vous n'êtes pas habitué,
il se peut
que le libellé ne soit pas très convivial. Mais la réalité est que si
vous faites juste attention, vous choisirez
certains mots-clés. Juste ici. C'est dire que l'altitude
était en conflit avec Stephen sur les contraintes clés étrangères sur la colonne que nous sommes
formés à ajouter, qui est plutôt mélangée à
Meek ID. Quel est le problème ? Le problème, même si les zones qui le
voient vraiment
, c'est le problème. Si nous allons à la base de données
et que nous regardons dans la table des voitures, rappelez-vous que nous étions
entrés dans certaines voitures. Il avait entré des voitures dans notre base de données ou ils n'ont pas la idée du micro de
ce qu'elles sont là. Et l'ID du micro ne peut pas être
égal à 0, car encore une fois, l'ID du micro ne peut pas être une valeur qui n'existe pas
dans la table de micro. C'est l'un de ces dangers
lorsque vous modifiez bases de données que vous effectuez des migrations. Je vais devoir
apporter une modification. Et il existe deux façons modifier chaque fois que vous introduisez une clé étrangère dans une table qui contient déjà des données L'
un des dangers
est que vous
allez vous retrouver avec cette erreur.
. C'est l'un de ces bons Aras, j'appelle cela une bonne
erreur d'apprendre. Ce conflit est
dû au fait que j'introduit une clé étrangère dans une table qui comporte
déjà des règles qui
n'avaient pas besoin de la clé étrangère. En ce qui concerne,
ces rôles,
rôles existants violent
les contraintes que la clé étrangère doit avoir. La colonne de clé étrangère
est informée qu'elle ne peut pas être nulle et que sa
valeur par défaut est 001041. Désolé, il n'est pas
valide pour notre clé étrangère. Pourquoi ? Parce que vous ne pouvez pas l'avoir. Une clé
primaire correspond à la valeur 0 de la clé primaire. Ainsi, Meek ID ne peut jamais
être dans la table de fabrication. Ils ne peuvent jamais avoir une valeur de 0. Il faut toujours qu'il s'agisse
d'un ou d'un niveau supérieur. Il ne peut jamais être 0 en
essayant d'entrer dans IT pro, manière réactive dans la
base de données ou après le fait qu'il
y a déjà des lignes, il essaie de leur donner
la valeur par défaut est 0, ce qui provoque que conflit
dont il parle. Très bien, je peux
modifier le fichier de migration ici. Ou je peux supprimer la migration, modifier le modèle
et corriger l'erreur. Je vais donc simplement vous montrer quelles modifications j'
apporterais à la migration. Et cela reviendrait à faire passer les connaissances de
faux à vrais. En d'autres termes, cela peut entrer, la clé étrangère, peut entrer, mais il n'est pas nécessairement nécessaire d'
avoir un modèle. Les voitures existantes
ne sauront tout simplement pas de quel modèle elles sont. peu près, il n'y en aurait pas. C'est pourquoi personne n'est vrai. Ensuite, je n'ai pas à rester à la valeur
par défaut non plus
parce qu'elle peut être connue. Donc, s'il n'y a pas de
valeur, alors c'est non. S'il y a une valeur,
il y a un volume. C'est l'
option A. Option B, ce serait l'option E. Laissez-moi avant de continuer. L'option a, me permettrait de savoir simplement essayer
à nouveau la base de données de
mise à jour. Ensuite, il essayerait une nouvelle opération de migration
modifiée, qui consisterait à ajouter
cette colonne comme nullable. Et ceux-ci éliminent tout
risque de conflit. C'est donc l'une des
options possibles lorsqu'il s'agit de générer une migration. Cela ne répond pas nécessairement aux exigences si vous
devez modifier cela, modifier la migration
et réessayer. Non, une autre option serait, et je choisirais probablement cette option car c'est une option
plus sûre dans mon livre. Premièrement, supprimez la migration. Voyez donc, d'accord, oubliez que je vous ai dit
de faire cette migration. Pour ce faire, c'est littéralement
supprimer la migration des traits d'union. J'ai toujours vu cette commande
plus tôt lorsque nous avons fait la migration des annonces et il a dit d' annuler cette action migration de déplacement de
l'utilisateur. Nous avons une migration
de qualité. Nous voulons le défaire. Je vois donc simplement supprimer la migration. Il va effectivement supprimer ce fichier du dossier de
migration. Ensuite, je suis allé mettre
à jour mon modèle pour avoir des règles qui
généreront une migration amère. La règle que je suis allée
modifier est que je suis allé
rendre l'ID du micro nullable. Une autre chose qui
influe la
décision Entity Framework de faire cela un int qui n'est pas nullable est notre notation
pour dire que c'est nécessaire. Cela va
être un
aperçu parfait de la façon dont nous allons
devoir séparer la validation au niveau
de
la base de données de la validation au
niveau client car à ce stade, je vois nécessaires pour l'année et le coin
salon et Joe K, cela n'
affectera pas vraiment cette base de données. Mais nous avons ensuite vu où
la rationalisation est reflétée dans la
base de données et le fait que le modèle n'est pas nullable est
reflété dans une base de données. Ensuite, lorsque j'ai rendu cela nullable
sur l'interface utilisateur, je vais certainement en avoir besoin, je ne vais pas les télécharger
pour continuer avec la tension. Cependant, dans la base de données d'
entre eux disant que c'est facultatif, ceux-ci se séparent en
deux mondes différents. Les besoins de l'interface utilisateur sont différents des besoins
de la base de données. Gardez cela à l'esprit. Mais nous allons finir
ce concept en bref. Après avoir supprimé l'annotation
requise et fait l'int et l'int, je peux savoir aller de l'avant et
relancer ma migration. Et quand je fais cela, ma migration ne
s'affiche pas pour la colonne, elle est int, mais elle
est nullable. Aucune valeur par défaut. Ce n'est pas un problème. Tout le reste va bien. Ainsi, lorsque nous mettons
à jour notre centre de base de données, cela réussit. Vous verrez encore une fois analyse doit porter sur
ce qui pourrait causer le problème autant que l'erreur ne l'a pas vraiment fait allusion. Mais c'est l'un de
ces domaines qui manière générale, si
vous voyez cette erreur, veille à ce que les risques potentiels
soient ruinés, j' introduis une clé étrangère à ce sujet. dans la conception
de ma base de données, car il
s'agit d'une activité continue. Lorsque vous voyez quelque chose de nouveau, vous allez devoir le modifier. Eh bien, c'est aussi facile
à générer. Une migration se fera
au niveau de la base de données, mais elle devient alors
plus difficile raison des règles et
des contraintes
imposées en
raison des règles et
des contraintes
imposées autour des
différentes colonnes par rapport
aux données existantes qui
pourraient ne connaissaient pas les règles au
moment où elles étaient entrées. C'est nous qui présentons cette
nouvelle table qui aide à sauter par-dessus et vous verrez que nous avons la table et l'écurie de la voiture. Si je prolonge cela,
vous verrez que dans les clés des voitures, j'ai la clé étrangère
qui vient d'être introduite. Si vous regardez le
nom ici par rapport au nom de ma ligne 39, vous verrez que c'est le même nom. Si les voitures de soulignement gay sur le score sont mixées sur
la partition Meek ID, c'est le nom de
la clé étrangère. Si nous recherchons le mix, nous verrons également qu'
il a sa clé primaire. Donc, aucune colonne
pour les voitures serait l'idée qui est un modèle
clé primaire pour chaque année. Et puis faites remarquer à Idea que l'élément
clé que je ne peux pas à côté, ce qui signifie que c'est une
clé étrangère, des clés primaires. Les clés étrangères ressemblent à ça. Nous avons ajouté avec succès
une autre table à notre base de données. Nous avons également dû
faire des compromis et supprimer certaines choses de
notre interface utilisateur, la facilitée. Lorsque nous reviendrons, nous
devrons mettre à jour
notre interface utilisateur pour que le nouveau champ soit
normal. Les champs parce que nous ne nommons
plus, nous connaissons notre
modèle et nous avons un micro. Et nous sommes également
allés examiner comment nous allons séparer les règles concernant
ce que
les utilisateurs peuvent faire sur l'interface
utilisateur des règles imposées par la
base de données.
17. Améliorations des formulaires - 1ère partie: Très bien, les gars, nous
avançons bien. Lorsque nous étions l'année dernière, nous avons mis en place la nouvelle bande
avant que mix ne crée également l'
association de clés étrangères pour les micros sur les voitures. Sachez que les règles que nous avons suivies auraient pu être étendues pour n'importe quel nombre de clés
étrangères, car certaines personnes auraient
étendu la trousse antidote. Ils ne modèleront pas l'
acier parce qu'ils ne
peuvent pas risquer que les gens écrivent le mot Sony pour la
même Nissan, Nissan Sony. Et une personne en met un, l'autre en
met deux bouts. Plus tard, nous
examinerons ce type de tableau de scénarios maintenant,
nous voulions nous
concentrer sur la
mise à jour de notre interface utilisateur avec notre introduction de nos nouveaux champs sous
la forme de marques et modèles ou Meek ID et modèle. La première chose ou bien, je ne veux pas dire la
première chose comme si nous devions nécessairement
suivre cet ordre. Mais une chose dont nous
allons certainement avoir besoin serait les
pages de foule pour la moyenne. Parce que nous pouvons écrire non, voitures
dépendent de Meek ID. Je ne peux pas très bien mettre une liste
déroulante pour le micro
plutôt que pour les voitures à
moins que le mixage n'existe. Je vais devoir créer quelques pages pour que nous
puissions gérer le mix. Je vais juste aller de l'avant
et cliquer sur ajouter un nouveau dossier. Et je vais appeler ce mélange. Ensuite, nous sommes allés un par un en créant
toutes les pages de code. Nous avons fait la page Créer, donc
nous avons fait la page de modification, etc. Pour moi, je suis allé faire une opération
plus en gros. Nous allons donc simplement
cliquer avec le bouton droit sur ce dossier, cliquer sur Ajouter une série de pages, puis nous utiliserons l'
option Pages Razor utilisant Entity
Framework et brut. Très bien, cliquez sur Ajouter. Ensuite, il va
dire, d'accord, quelle est la classe modale cette fois que
nous avons affaire au micro, c'
est-à-dire le
contexte de données et cliquez sur Ajouter. Maintenant, si vous
regardez ce qu'il y a dans le dossier, vous verrez que toutes
les pages que nous avons vues ont méticuleusement ajoutées une par une lorsque nous avons
affaire à des voitures, elles sont toutes générées pour nous. Nous avons l'enchère sur l'indice, qui est la liste des mixages. Nous avons la page d'édition, qui est le formulaire
pour modifier le mix, nous avons les détails. Ils ont tous été
générés en un seul balayage. Je vous ai emmené à travers eux
un par un pour que vous puissiez
regarder le code. Maintenant que nous
comprenons mieux ce que chaque page fait sous le code
généré. Nous pourrions simplement faire les opérations
de gros. Vous pouvez le faire
pour vos cours, mais ne prenez pas trop d'avance et commencez à le faire pour
tout le reste, car il y a
d'autres choses que nous devons prendre en compte dans la conception, mais non, c'est C'est très bien. Nous avons maintenant la capacité de créer ou de saisir des données dans
la table mixte. Ensuite, une fois que nous avons entré des données dans cette table de mixage et que nous
construisons cette liste dans la base de données. Nous devons être en mesure
de les présenter
aux utilisateurs lorsqu'ils
entrent dans une voiture. Une chose que je vais faire
est d'ajouter cet élément de menu ou
un élément inconnu à la hauteur de mise en page afin que
nous puissions y accéder. Et puis je vais juste
contrôler F5 et faire un test rapide juste pour m'assurer que le code fonctionne pour moi. sautant sur le lien, nous pouvons cliquer sur Créer un nouveau. Et puis le
premier est Toyota Create. Et nous voyons créé. Nous n'avons donc
pas écrit de code, juste savoir. Tout ce que nous avons fait, c'est simplement suivre une simple étape de l'
échafaudage ou toutes les pages. Et maintenant, nous avons toutes ces
modifications. Nous avons les détails. Comme vous le voyez, il est revenu avec les boutons
et les liens standard et ainsi de suite. J'ai donc toujours pensé
à l'uniformité des bulles. Nous voulions nous assurer que
nos boutons ressemblent à ceci pour toutes nos applications afin que vous puissiez
aller de l'avant et les coiffer. Exercice muscles
bootstrap souples no. Et commencez à voir bien. Je veux que tout
ressemble de la même façon. Pas de problème. Mais pour l'instant. Nous voulons simplement nous concentrer
sur la fonctionnalité. Donc on va, laisse-moi
juste en mettre un de plus. À ce stade, c'
est peut-être un administrateur qui gère
cette liste mixte. C'est très bien. Maintenant, lorsque nous regardons
la création pour voiture, rappelez-vous que nous devions entrer
jusqu'
au champ qui
restera dans le nom. Mais non, nous devons avoir un champ
pour le modèle et nous devons avoir un champ qui est une
liste déroulante avec la liste des mixages. Ce que nous devons faire, c'est
sauter sur notre page de création de voitures et je vais décommenter cette
section pour le nom du point de voiture. Aucun disque ne peut être sculpté,
modèle de point de voiture. C'est là notre nouvelle contribution
pour cette section. Mais je vais aussi vous présenter, je ne fais que copier le groupe de formulaires. Encore une fois, l'uniformité. C'est ce qui a été généré
chaque fois que nous voulons des contrôles. Je vais juste le garder
dans ce genre de format. Même si je le tape manuellement,
il se peut que vous
deviez le faire. Il est bon de simplement suivre cette convention de codage, car c'est pour la
couche que vous voulez. Pour le modèle Kardon
ou pour le prochain, je dirais Car dot mq ID. Maintenant, pour l'ID du micro, nous voulons une liste déroulante. Nous ne voulons pas prendre la boîte. Rappelez-vous donc que c'est des informations que
nous avons une étiquette appelée select. Cette balise nous permet
de mettre en place des options. La première option que je vais
dire est de sélectionner un micro. Très bien, c'
est donc la première invite. Mais évidemment, je
ne vais pas m'
asseoir et écrire dans toutes
les autres options, Nissan et Toyota. Parce que si je le fais manuellement, cela annule le fait
que nous voulons avoir cette liste dynamique de la table
mixte dans la sélection, je vais dire ASP tiret quatre. Donc, ce sont des assistants de balises
où je peux voir que je veux que cette liste déroulante
soit pour l'identification de la marque de voiture. Ensuite, la prochaine chose
serait de dire, où est-ce que je vais obtenir
les articles ? Mes articles doivent
provenir de certaines listes. Je vais donc me voir me mélanger. Je ne fais que mettre ça dehors. Ce n'est pas encore le nom
de la liste, qui n'existe pas encore. D'où la ligne rouge. Dans le code derrière, j'ai besoin d' envoyer ou de préparer
au moins appelé mix, qui comprendra la liste
de moi x de la base de données. Donc, en passant par là, je
vais vouloir créer nos droits de propriété
sur le point. Ou en fait, je préfère avoir mes propriétés au-dessus de mes méthodes. Je fais juste ce refacteur
rapide. C'est parce que je
préfère l'avoir ainsi. Si vous n'avez aucun problème, aucun problème n'est
nécessairement nécessaire, mais j'aime les voir
tous au même endroit. Donc oui, nous savons que nous
avons la propriété automobile. Mais ensuite, je suis allé dire liste de sélection
publique. Il s'agit donc d'un nouveau
type de données que nous examinons. Et j'appelle ça un mélange. Nous faisons ça Gita et nous asseyons. Ensuite, après avoir la liste de
fentes sur get, rappelez-vous qu'on se prépare. Il est plutôt là pour que nous puissions préparer toutes les données
nécessaires à la page. Avant cela, aucune donnée n'était
nécessaire pour la page. Nous avons juste dû revenir
à une forme vide. Non, j'ai besoin de récupérer
ce truc de la base de données, de la table mixte, le
remplir ou de le placer dans
cette propriété mixte. Et je pense que d'après
le nom ici, je dois dire « mixage
modélisé ». Pour avoir créé un mix, je peux dire que modélisé
fait des excuses. C'est un mélange model.fit. Et voici nos micros
correctement appelés. Je dois remplir mix avec les données
provenant de la table mixte. Sinon, nous ne serions pas plus près d'accomplir
ce que nous sommes. Non. Je peux donc voir que mix est égal à, je ne veux pas initialiser
une nouvelle liste de
sélection pour sélectionner me permet de transmettre
une collection d'éléments. Et puis, tout comme avec la balise de sélection ou
la liste déroulante, j'ai quelque chose qui est affiché et quelque chose qui
est piégé ou stocké. En d'autres termes, lorsque
nous affichons le micro, l'utilisateur doit voir Toyota, Nissan,
Lamborghini, Ferrari. Cependant, bien que nous ayons besoin de suivre et de stocker l'ID réel, est pourquoi nous avons dit
que c'est
l'ASP pour l'IID doux, signifie que tout ce que je sélectionne
dans la liste déroulante, regardez sa valeur et stocke
cette valeur. dans la marque ID. Cependant, je vais afficher le nom
associé à la moyenne. Pour la liste, je vais
voir le contexte. Contexte. S'il vous plaît, donnez-moi tous
les micros et pour la
lister , c'est moi qui
me dis de me donner tout le mix
dans la base de données. Ensuite, je vais juste dire Côme. Désolé, je
vais juste m'en assurer. Ok, oui, parfois
je les confond. Nous avons donc le champ de valeur des données et le champ de texte des données. Donc, la valeur que nous
vérifions est la moyenne, c'est l'ID plutôt de
la table mixte. Et si vous avez oublié, passez
simplement à la table mixte pour voir
quels sont les noms des champs. La valeur que nous faisons du
camionnage est l'ID. Nous voulons ramener le nom. Vous remarquez également que j'ai
ces propriétés supplémentaires, donc c'est en fait facultatif, mais cela sert le
même objectif que lorsque nous mettons la
propriété micro dans les voitures, ce qui signifie qu'une voiture en
aura une doux. Vous ne pouvez pas avoir une voiture que
vous allez appeler un mélange différent pour avoir une Nissan ou je vais vous dire
quelles sont certaines choses. C'est
pourquoi dans la table de la voiture, nous avons une pièce d'identité pour la voiture
et une propriété de navigation. Cependant, Toyota fabrique de nombreuses voitures. Donc, si nous
regardons un Toyota record, il pourrait y avoir de nombreuses voitures qui
ont l'identifiant Toyota C'est pourquoi nous avons
une liste de voitures jusqu'à présent, n'importe quel enregistrement micro que nous examinons, nous pouvons en fait voir tous les les voitures qui y sont
associées sont toutes liées. Pendant que nous sommes ici, je peux
simplement couper le son de ce virtuel. Très bien, revenons à notre code
où camionner l'ID, mais nous voulons afficher
le nom à l'utilisateur. C'est juste que je vois sur le chargement linéaire dans la page. Veuillez continuer et
exécuter cette requête, remplir cette liste, puis
renvoyer la page. Une fois que nous aurons fait tout cela, je vais juste enregistrer et
contrôler F5 pour prévisualiser. Et nous y voilà. Je sais que c'est un peu
irrégulier, mais on peut y remédier. Ce que nous voyons, l'identifiant du micro. C'est donc notre label.
Nous ne l'avons pas tapés. Tout ce que nous avons fait, c'est lui donner l'étiquette et dire que
je vais simplement sauter par-dessus. Tout ce que nous avons fait, c'est dire une étiquette
pour la carte d'identité unique de la cardamome. Eh bien, nous voyons l'étiquette. Si nous regardons cette liste
déroulante, nous voyons l'
option Sélectionner un micro. Nous voyons également d'autres choses que nous n'avons pas ajoutées en tant qu'options. Vous voyez donc qu'il va à la base de données et obtient
Toyota et Nissan. Encore une fois, ce qui est génial à ce sujet,
c'est une fois que cette liste est mise à jour, donc si je dis Ferrari et crée, une fois que j'ai rafraîchi la page, elle rafraîchira cette
liste et elle apparaît. Très bien, c'est la puissance
de cette liste déroulante. Lorsque nous voulons restreindre
ce que l'utilisateur peut entrer, nous lui donnons simplement une liste déroulante et nous
conservons cette table. Sinon, ils ont
très peu de
contrôle sur ce qu'ils peuvent mettre
pour cette valeur. Je veux dire, en ce qui concerne le style, ce qui nous manque, c'est contrôle de formulaire de
classe sur la classe de sélection est
égal au contrôle de formulaire. Je vais juste le sauvegarder, le rafraîchir
et l'autoriser à compiler. Et c'est un
peu mieux. Ensuite, nous pouvons également voir comment modifier
toutes les étiquettes. Mais essayons de créer une voiture. Premièrement, si je dis sélectionner un micro, je ne mets pas notre modèle,
je ne mets pas l'oreille interne. N'oubliez pas qu'un modèle
est requis ici. Si j'ai essayé de créer, ça me dira, Hé, tu ne peux pas aller plus loin
tant que quelque chose n'est pas fait. Il me dit que le
mauvais message de validation est erroné ici. Et c'est parce que
je n'ai pas fait de mise à jour. Cette validation était loin. C'est l'un
des dangers du copier-coller. Assurez-vous simplement de
couvrir toutes les bases. Mais c'est pourquoi
nous sommes ici pour tester. Si je mets Toyota, j'ai mis le modèle Sea Harrier. L'année est 2001. Si tout semble
valide et que je crée
, nous voyons notre liste
revenir avec trois. Nous en ajoutons deux avant
et en supervisons trois. Non, dans la liste, rien n'est affiché. Y n'est rien
affiché sur cette liste. Maintenant, passons
à la liste et voyons. Nous avions donc commenté
le nom et l'année. Ce que je vais faire, c'est simplement
décommenter tout cela sur les commentaires, tout. Le nom va
générer une erreur car il n'y a plus de
nom n'est pas un modèle. Et regardez cette nulle quand je veux voir quel type
de carte de l'année. C'est donc une Toyota Harrier 2001.
Qu'est-ce que j'ai, n'est-ce pas ? Non. Je n'ai que l'
année 2001, micro sur Meek ID, qui est le champ de
la base de données. Mais évidemment, je ne peux pas
montrer aux utilisateurs qui font de l'informatique. Je vais donc simplement afficher ce que les utilisateurs
verraient si je disais Meek ID, car les valeurs d'ID sont
vraiment destinées à
un usage interne, elles ne sont pas vraiment destinées à la visibilité de l'utilisateur. Quand je me
rafraîchis et que je vois ça, non, les deux premiers n'ont pas d'ID
micro et c'est très bien. Nous comprenons pourquoi
parce qu'ils existaient avant de le
faire entrer dans le micro. Cependant, je n'en vois qu'
un seul. Qu'est-ce qu'un ? Qu'est-ce qui est plus élevé ? Cela ne signifie rien pour l'utilisateur. Nous avons donc déjà établi que les clés
primaires sont
utiles pour naviguer. Donc, dans tous les enregistrements que nous examinons et quel
enregistrement nous ciblons. Dans ce cas,
cela s'affiche, cela ne signifie rien pour l'utilisateur. C'est pourquoi nous avons la propriété de navigation
que je décrivais. Lorsque nous avons créé une voiture, nous nous sommes assurés de mettre cette
propriété de navigation parce que
non, je peux voir me donner le micro associé à
cette voiture et je peux obtenir les détails de ce
micro dans la forme de son nom. Je peux donc savoir qu'il suffit de rencontrer ce changement
rapide dans mon point de vue. Et je vais probablement faire
une autre erreur, mais laissez-moi rencontrer ce changement, rafraîchir et c'est vide. Très bien, voyons
pourquoi c'est noir. C'est vide parce que lors de la
préparation des données, je dis que
donnez-moi toutes les voitures. Je dois dire à la question que
lorsque vous me recevez les voitures, je veux également inclure
les détails du micro. Je prends les voitures, oui. Et il a eu la carte d'identité Meek, mais ça n'a pas eu les
détails du méchant. Je vous montre simplement comment
tout est interconnecté. C'est pourquoi je continue
de vous montrer ce qui ne fonctionne pas sur la façon dont nous y remédions. Donc, pour obtenir les
détails du micro, je dois voir les voitures y compris. Ensuite, je vais lui donner une expression lambda
où ils ont
traversé à quoi ressemblaient les
expressions lambda. Je vois inclure les douces. Ainsi, chaque fois que vous avez une clé étrangère sur une table et
que vous avez cette
propriété de navigation et que vous
souhaitez exécuter une requête dans laquelle vous
accédez également à tous les détails de la table des clés étrangères comme table principale. C'est
tout ce que vous avez à faire. Base de données Donnez-moi les voitures, incluez les détails pour les douces
correspondantes et donnez-moi tout au moins
après avoir effectué ce changement. Si je me rafraîchis à nouveau
, nous voyons Toyota. Vous voyez comment tout
vient de se réunir à celui-ci. Encore une fois, permettez-moi de passer en revue. J'ai inclus les détails
du micro dans la requête. Dans les voitures, c'est passé. C'était facile pour moi de voir, me
donner la voiture, me donner le doux et de me donner le nom. Maintenant, au cas où je n'
expliquais pas ce que ces indices de zones sont ici plutôt qu'ils ne
sont pas faits ici, nous voulons juste le nom complet. Vous pouvez donc simplement
supprimer cela et ajouter votre propre
nom d'affichage si vous le souhaitez, ce serait très bien. Nom ici, le nom ne veut
vraiment rien dire. D'accord. Oui, nous avions nommé
au départ mais nous avions le nom que je vais parcourir ou
Suzuki dans le sport. Aucun nom ne
va seulement stocker Toyota car le modèle est
là pour voir un plus haut. Donc, ça devrait vraiment dire
quelque chose de plus comme moi. Si vous souhaitez modifier
ce qui est affiché, vous pouvez facilement supprimer ce
code et l'insérer dans le vôtre. Nous avons déjà regardé les tables. Nous savons ce que nous pouvons mettre dans notre propre texte pour
l'en-tête du tableau. Avec ce simple changement, lorsque nous régénérons le
tableau ou la page, nous ne voyons pas l'impression douce. Très bien, donc vous voyez comment
tout se réunit. Le fait est nous devons essentiellement répéter
ce flux partout où
il extrait des données et qu' il s'
attend à afficher quelque chose. Donc oui, nous l'avons dans la liste, mais passons par ce qu'on
appelle le test de régression. Maintenant, chaque fois que vous apportez une
modification à votre système, vous avez toujours voulu vous
assurer que tout ce qui été obtenu et travaillé fonctionne en acier. Nous voyons que
la liste fonctionne. Nous voyons que nous devons
créer du travail. Si je regarde la modification et les détails, je vais voir que, ok, Update a encore
besoin de travailler dessus. Et les détails nécessitent
un peu de travail là-dessus. Changeons donc ces vieux. Commençons donc par les
mises à jour car nous
savons déjà que la mise à jour
ressemble à la création. J'ai juste besoin de prendre les mêmes champs que ceux que j'
ai créés pour la liste de sélection et le modèle et de les mettre
dans la mise à jour, juste au-dessus du code
commenté et du coller. Mais ce n'est pas seulement ça. Nous devons encore charger
cette liste déroulante car les graines qui la complètent
ne savent pas ce qu'est le mélange. Tout comme ce que nous avons fait
avec la création où nous avions cette propriété appelée micro. Quelqu'un est parti pour vous donner cette
propriété appelée mix à nouveau. Ensuite, je vais devoir remplir ce qui rend la propriété avec des données. Donc, tout comme ce que nous avons
fait, c'est sur
la mise à jour. Je vais devoir le
dire si oui,
ici, il est dans le
dossier de la voiture pour être atténué. Mais je vais juste aller de
l'avant et mettre ce mélange. Donc, si vous obtenez l'enregistrement de la voiture et qu'il ne renvoie pas la dynamique du téléphone
NADH, la prochaine base de données
appelée pour obtenir le mix, nous pouvons renvoyer
la page après avoir apporté ces modifications à
la page de mise à jour. Si je me rafraîchis, je
vais voir que c'est ce
qui se passe. Notez qu'il est
par défaut de sélectionner un micro. Si je retourne à la liste et que j'en
choisis un qui a un micro, vous me
lierez automatiquement et montrerez le lait
sélectionné précédemment. Il est contraignant. C'est, c'est un peu intelligent. Mais parce que les autres
ne m'avaient pas, cela ne me montre
rien, excusez-moi, la valeur par défaut une fois
qu'une valeur rencontre une fois par semaine vous présentait à la liaison automatique sur
l'édition pour les détails. Avant d'en arriver
aux détails,
veillons à
ce que cela fonctionne toujours. Je suis allé voir que c'est un outil de 2 000 tout
aussi simple changement, sauvegarder, et nous voyons qu'
il est reflété, donc l'éditeur fonctionne toujours. C'est bien. Nous devons mettre à jour les
détails pour
lui faire savoir ce qu'on attend de lui afin de ne pas commenter que SHA-1
malade était d'abord, je l'ai dupliqué, puis
je peux le décommenter. ne s'agit pas d'un nom, non plus d'un nom, mais d'un
nom de point et ce n'est pas un modèle. Aucun détail ne montrera l'oreille, le nom du
micro du micro et le modèle. Pour notre question. Nous devons le faire savoir
quand vous obtenez une voiture en premier. Troisième valeur par défaut. Encore une fois, veuillez inclure les
détails du micro. Alors incluez l'expression lambda
et le micro sur la route, nous obtenons la voiture avec les détails. Et ensuite, on peut tout voir. Si je vois les détails
du nom supérieur Toyota, vois tout revenir. Encore une fois, nous voyons ce
nom juste là. Le truc est non,
je suis allé voir je suis
allé me retenir sur
le changement de propriété ici
parce que nous l'avons fait pour l'index où je le
modifie manuellement. Mais alors nous voudrions peut-être le
faire pour les détails, mais si nous changeons l'argent,
est-ce qu'ils l'ont jamais été
et puis le client ou celui que nous construisons le logiciel pour un vient et dit : mais si nous changeons l'argent,
est-ce qu'ils l'ont jamais été
et puis le client
ou celui que nous construisons le
logiciel pour un vient et dit :
pas comme cette étiquette,
changez cette étiquette, alors c'est autant d'endroits que nous allons devoir
faire face au changement. moyen plus rapide de répondre à ce type de modification consistera
à utiliser des annotations. Ici, je peux voir la
classe MEC que vous affichez. affichage. Ensuite, après inclure les bibliothèques
manquantes,
contrôler les données et entrer. Le nom est alors le paramètre. Donc, votre nom complet est simplement en changeant qu'il se trouve
ici au-dessus de cette propriété. Partout où le nom
d'affichage de ce nom est déjà mis à jour. Partout où
le nom complet de la bêta du code est
utilisé comme dans l'index. Avant de le
changer en nom
d'affichage de départ, je vais automatiquement rechercher toute annotation de données
au-dessus de cette propriété qui voit s'afficher
, puis utiliser ce texte. Cela me
lancerait le chagrin d'avoir besoin de changer
cet argent alors qu'ils partout, je peux revenir à afficher le
nom de l'index. Je peux le garder dans les détails car
il y a un nom complet pour. Ensuite, partout où il
est référencé, il
utilisera automatiquement ce goût. Très bien. Je vous
montre juste des façons plus propres au lieu de retaper à sec. Ne vous répétez pas. C'est l'un des principes
fondamentaux d'un développement solide. Donc, le moins possible,
devriez-vous toujours retaper du
code à la recherche d'une solution qui a une portée plus globale, par opposition à une solution
qui exige que vous
continuiez à faire la même
chose encore et encore. Essayons maintenant de créer un
autre modèle. Appelons ça une Tesla,
année 2221 création. Très bien, donc vous voyez que
ce n'est pas valide pour ma carte d'identité. s'agit donc d'une de
ces erreurs par défaut car nous n'avons pas mis de message
d'erreur dessus, mais cela
nous remet simplement en mémoire tampon et voit qu' elle n'est pas valide pour Meek ID, donc la validation est presque
automatique à ce moment-là. De la même manière, si j'ai une date non valide, année autre que vous voyez l'oreille de champ doit se trouver
entre ce message. Ce message
arrive parce que nous mettons l'accent sur
les détails. Vous pouvez ainsi
améliorer l'interface utilisateur et appliquer certaines règles permettant à vos utilisateurs préserver l'intégrité de vos données.
18. Améliorations des formulaires - 2e partie: Très bien, les gars. Ce que nous voulons faire, c'est continuer nous
appuyer sur
la façon dont nous
améliorons les forums et sur les deux choses que
nous devons
faire pour garantir la meilleure
expérience possible à nos utilisateurs. Savoir quand il s'agit
des étapes de validation, les vues remarqueraient que notre valeur n'est pas
valide lorsque nous avons essayé de
soumettre les données non valides. Et c'est vraiment parce que nous
avons les
scripts de validation ici, veillant à ce que seules les données valides soient au-delà de ce que
dit le client et c'est bien. Mais dans le
cas où il y a certaines circonstances où il peut penser que c'est
valable de ce côté-ci, mais nous avons besoin d'une validation
côté serveur. Il s'agit donc d'une
validation côté client. Vous m'avez entendu parler de
l'ensemble des clients. Je pense que la validation côté client a lieu sur le front end, n'est-ce pas ? Ainsi, entre JavaScript et HTML, nous indiquons aux utilisateurs ce
qui est valide, ce qui ne l'est pas. Si j'utilise un désactive JavaScript, ils peuvent facilement contourner
ce mécanisme. Il peut également arriver que certaines règles de validation soient évaluées côté serveur. Donc, si vous avez une logique complexe, vous avez peut-être une autre
validation pour vous assurer que le modèle correspond micro de
la voiture ou à
quelque chose comme ça. Quoi qu'il en soit, c'est complexe. Il ne peut pas vraiment être portrait dans notre ESR, ni n'est requis, ou c'est entre ces valeurs. Ce n'est pas vraiment un booléen ou
quelque chose de rapide. Ensuite, nous devrions créer des règles de
validation plus complexes côté serveur ou dans le code pour
garantir sa validité. Ce que je veux dépeindre en ce
moment, c'est ce qui se passe lorsque la
validation côté client n'est peut-être pas en cours d'exécution. Pour faire une
expérience rapide,
je vais simplement commenter partiellement
les
scripts de validation. Un moyen rapide de commenter, placez le curseur sur
le contrôle de ligne. Casey va commenter et la touche de contrôle vous
décommentera. Maintenir le contrôle enfoncé. Vous appuyez sur la touche, puis vous appuyez sur C, puis elle entrera. Et puis vous faites la
même chose avec Key et vous, et cela ne commentera pas. Je désactive ce script qui s'exécute
côté client. Et je vais mettre le
point d'arrêt ici pour que nous puissions voir ce qui se passe lorsque quelque chose
est invité sur le forum. Je vais simplement cliquer sur
Créer et voir ce qui se passe. Il saute directement au poteau. y a donc pas de message
de validation. N'oubliez pas que la dernière fois,
nous
imprimions toujours tout le
message de validation sur le bouton. Non, aucune
validation côté client n'est en cours. Donc notre sécurité intégrée est
cet état du modèle, l'état modèle DOT est valide, est valide, la rétine est fausse. Si nous regardons les états modèles, juste pour comprendre
exactement ce qui se passe ici. Lucy, le
statut de validation est valide,
combien il y en a, alors vous avez les
clés et les résultats. Passons donc aux résultats. Les résultats indiquent les clés et les
jeux de validation de chaque clé. La clé ici serait donc
chaque valeur qui se trouve dans le modèle validé
ou le module de voiture. Et la validation indiquerait
que l'année est requise, que le
modèle est requis, qu'il s'agisse d'une identification bien que tous les
éléments soient requis. Non. Aucun d'entre eux n'a été fourni. Tous ne sont pas valides. Et ensuite, si vous voulez
approfondir , vous voyez la clé, vous voyez la valeur,
puis cela vous donnera d'
autres détails. La valeur tentée était qu'il
y a beaucoup de choses que vous ne
pouvez pas tirer de
cet état de modèle. Voici donc cette erreur exacte. C'est dire que la valeur qui est une chaîne vide est invitée. C'est l'érudit que vous
allez y arriver, appuyez sur F5 illimité, continuez. C'est ce qui empêche la vieillesse. Nous obtenons donc ce résumé de
validation et nous obtenons chaque erreur
sous chaque champ. Donc, si je mets quelque chose
en dehors de la rentrée, ai dit que la fourchette
va de 1999 à 2020. Donc, si je mets 1990 et que j'essaie à nouveau
, c'est toujours invalide. J'appuie encore une fois sur F5. Non, ça va nous montrer
un autre, oh, désolé. J'aurais dû dire 1900. Cela aurait été invité. Laissez-moi essayer encore une fois. Alors créez de la chaleur, le point d'arrêt, continuez, et voilà. oreille du champ doit donc
se situer entre 1990 et 2021. Nous voyons donc
toute la validation où nous
connaissons ce Randolph. C'est quoi ? validation côté serveur
réinitialise la table si quelqu'un désactive son
JavaScript dans son navigateur, ou pour quelque
raison que ce soit la zone avec un contournement du JavaScript car tout avec
HTML et et CSS sont disponibles
pour vos utilisateurs. Il s'agit donc d'un nœud de codage
sécurisé car tout ce que j'ai à
faire est d'inspecter l'élément. Je peux voir tout ce qui se trouve
au-dessus du code. Je pourrais modifier
certaines choses. Je pourrais choisir de désactiver ce script sur cette
page, des trucs comme ça. C'est un trou, le trou important ou l'étape de validation
côté serveur est de s'assurer que nous ne le faisons pas, nous ne retournons aucune
ordure à notre système. Maintenant, un autre gros problème
que nous devons absolument aborder est le fait que j'
allais tout juste recommencer. Nous allons créer de nouveaux. Nous avons notre liste de
micros qui ne sont pas amusants. Je suis allé dire modèle Toyota, modèle
de voiture, peu importe. Je clique sur Créer, hiver, supprimer ce point brute car nous savons qu'il va être
invalide car
il n'y a pas de modèle, aucune valeur pour l'année fournie. Mais qu'est-il arrivé au doux ? Regardez ça, cette
liste a disparu. Ce qui se passe, c'est que
lorsque nous traitons liste de
sélection et de certains
types de listes dans la publication, vous
devez toujours vous assurer que si vous allez retourner la page, vous devez retourner la page.
la page contenant toutes ces données
supplémentaires. Parce qu'à l'heure actuelle, les
seules données qui sont bonnes à persister sont tout ce qui a
la propriété bind au-dessus. Même si je vois la propriété Ben
au-dessus de la liste de sélection ici, la réalité est qu'
il n'y a pas de champs sur mon formulaire pour stocker toute la liste. J'ai un champ pour stocker
l'ID sélectionné dans la liste, mais pas la liste entière. Cette liste doit être actualisée
chaque fois que cette page se charge. Juste pour dire que nous
ne pouvons pas aller chercher la liste de la
base de données et par période. Il peut donc être chargé lorsque
je suis invalide ou le pH, la soumission est dans
un état non valide et le
pH doit être renvoyé. Le pH va devoir être
retourné sans mélange. Je suis donc allé voir un exemple
de ce que je veux dire ici. Je vais juste mettre un code ici qui
va juste dire mix var. Après soumission est égal à mix. Nous allons examiner ce qui
est mélangé avant de soumettre. Ensuite, nous allons
examiner ce qui arrive à se mélanger après une soumission. Ainsi, avec les dernières versions de Visual Studio antérieures
en mode débogage, vous pouvez simplement
cliquer sur Appliquer les modifications de code. Revenez ensuite à votre code. Je vais juste rafraîchir la page. Très bien,
revoyons ça encore une fois. Je vais essayer de
créer et je vais envoyer quelque chose
qui n'est pas valide. Je vais remettre mes
points d'arrêt pour qu'il s'arrête pour que nous puissions voir quelle
valeur vient ici. Je vais aussi
mettre un point de rupture ici avant qu'il ne retourne une pêche. Alors, quand je vois, d'accord, laissez-moi me rafraîchir. Laissez-moi refaire ça, désolé. Alors, créez midi. Ensuite, lorsque je crée un nouveau, il atteint ce point d'arrêt
pour la page. Donc, si je regarde dans le mix, je vois que c'
est qu'il y a des données. Il dispose toujours de données qui
suggèrent qu'il possède des données. Il contient les éléments qui
seront entrés dans la liste
déroulante. Très bien, ça a l'air bien. Je vais juste
supprimer ce point d'arrêt. Envoyez quelque chose
qui n'est pas valide. Lorsque le point de rupture était que l'instruction if,
elle ne l'a pas frappée. Donc, je suis
juste en train de passer à la ligne 34 pour moi ou aux premiers
mémoires de la méthode. Je vais entrer dans cela
et ensuite regardons mix,
mix est nul juste pour piloter mon outil de point et qu'une fois
les données soumises, vous sélectionnez ceci et fondamentalement tout ce qui
est du moins qui ne l'est pas être désossé ou qui ne peut pas être
désossé va être vide. Une fois que vous l'avez soumis. Ce que nous devons faire, c'est
actualiser cette liste. Je vais juste m'arrêter. Et nous allons faire ce
peu de code pour nous assurer que la page est toujours fournie
avec sa liste de sélection. Ou dans le cas où vous
avez plusieurs listes déroulantes, il
s'agit du même concept. Cela permet
de s'assurer que tous sont renseignés avec
les données lorsque le
pH se charge du tout. Je pourrais donc simplement prendre ce peu de code
et le placer ici. Si l'état du modèle n'est pas valide, rechargez la liste des mixages,
puis revenez à la page. Sinon, allez-y pour
ne pas gaspiller l'appel de base de données. Si l'état du modèle est valide, il ne fera rien de tout cela. Il va juste sauter
là-dessus et continuer. Sachez que ce que je n'aime pas faire,
c'est répéter le code comme celui-ci. Pourquoi cela semble-t-il simple
et c'est simplement assez petit fichier de classe et ce n'est
vraiment qu'une ligne. Mais qu'est-ce que quelque
chose change alors ? Rappelez-vous, j'ai dit
que plus vous répétez au milieu du code
autour de
l'application, plus votre maintenance
sera difficile lorsque quelque chose change. Ce que j'ai tendance à faire, c'est d'
avoir des méthodes privées. Je dirai donc simplement une tâche privée. Nous allons simplement dire « tâche privée ». Et je vais en faire une tâche asynchrone. Ici. Appelez-le peupler, listes
déroulantes. C'est juste que l'on appellerait ça
remplir des listes déroulantes. Et puis à l'intérieur de ça, je fais cet appel de méthode. Donc cela saurait b. Et je peux rencontrer ces
associés asynchrone au moins un puits qui a besoin de moi
pour inclure cette bibliothèque. Et puis je pourrai rencontrer ce blé. Très bien, donc c'est
une méthode asynchrone. Je voulais utiliser
les méthodes asynchrones. Ce que je sais, c'est simplement appeler cette méthode partout où j'ai
besoin de faire cette population. Si j'ai plusieurs listes
déroulantes, je dois les remplir. Je viens de les
mettre ici une fois que j'ai appelé ça. Et puis il peut le faire parce
qu'il
y a d'autres situations
où vous pourriez avoir besoin de données qui ne
sont pas piégées sur la page. Il peut être nécessaire qu'il soit présent sur le pH si l'
état du modèle est invité. Donc vous pouvez, pourquoi j'appelle la liste déroulante
populate ainsi, vous pourriez aussi l'appeler
comme Seigneur, données initiales. Ainsi, pour toutes les requêtes, toutes les
opérations que vous devez
effectuer avant que la
page ne soit visible, vous mettez tout ce code
ici afin que nous n'ayons pas à le répéter
dans vos gestionnaires. Si vous en avez plus de 100, seulement 100 n'ont pas vraiment d'importance. Vous n'avez pas besoin de le répéter. Non, je dois l'attendre quand je passe l'
appel parce que
c'est asynchrone. Mais en haut, celle-ci me donne une flèche, et cela
me donne une erreur car cette méthode n'est pas asynchrone. Nous allons donc convertir
celui-ci en asynchrone. Tâche asynchrone. Et cette tâche devrait
renvoyer quelque chose de
type i résultat d'action. Et une fois que j'ai
fait tout cela, toutes les lignes rouges brillent
et tout le monde est heureux. Je vous montre juste
un petit piège ou des choses à prendre en compte lorsque vous écrivez
vos candidatures.
19. Améliorer les formulaires et les validations de collecte des données - Partie 1: Très bien, nous sommes en train de
créer cette application et nous avons montré à nos parties prenantes parce qu'au bout du compte, la plupart de ce que vous
allez construire, vous allez devoir faire une démonstration
à quelqu'un. Pendant que vous le testez, pendant que vous
le développez, vous le testez. Vous êtes soit guidé
par leurs attentes sous la forme de exigences
logicielles, soit vous êtes guidé par
ce dont vous pensez qu'ils ont besoin, qui peut être dangereux. Parce que dans cette situation sans aucune
exigence formelle, ils nous ont donné quelques commentaires et nous ont dit que certaines choses
devront certainement être modifiées. Non, numéro un, ils disent qu'ils ont besoin de
plus d'
informations sur les voitures à stocker. Connaissez l'année, le
micro, le modèle. Ce n'est pas assez d'informations. Ils ont besoin de nous dire de
quelle couleur
est la voiture et de fournir un numéro partagé de
licence,
qui, je pense, sont des points d'
étanchéité. Un autre problème qu'
ils ont signalé est que des erreurs d'orthographe peuvent se produire parce que nous avons laissé le modèle
sous forme de champ de texte libre. Bien que la musique soit une
liste déroulante, le modèle ne l'est pas. Et nous avons discuté du
danger de cela plus tôt. Donc, pour le même
résultat que nous avons obtenu, créez une liste déroulante. Il va falloir créer une liste déroulante
Modeler. Cela vient avec ses propres
défis aussi parce que le modèle, nous ne pouvons pas mettre un modèle aléatoire. Par exemple, une Nissan, une Nissan, un Sony avec un œil. Ce sont des erreurs d'orthographe. Cependant, rien n'empêche quelqu'un de taper
en Ferrari Sunnite. Et si vous savez quoi que ce soit
sur Ferrari, vous savez qu'ils n'
ont pas de modèle appelé sunnite. Ils ont donc également dit que
lorsque vous sélectionnez un micro, ils voulaient s'assurer que le modèle qu'ils peuvent
sélectionner par la suite
s'applique réellement à ce Meek. Ce sont là certaines exigences
qui sont arrivées à notre chemin. Nous avons déjà fait choses entourant certains de
ces changements. Et voyons exactement
comment cela va fonctionner. Le premier changement
que je vais apporter concerne l'entité automobile. Rappelez-vous que nous
avions introduit le micro, nous devons introduire d'autres
domaines et nous ne le sommes pas, nous connaissons
déjà ce que nous devons
faire pour introduire de nouveaux domaines. Le premier champ, j'utilise simplement Control D pour
dupliquer, donc je n'
ai pas à
tout taper à partir de zéro. Le premier champ serait une chaîne. Ce serait de la couleur. La couleur est également un autre sujet
sensible. Parce que quelqu'un peut écrire en bleu, quelqu'un peut écrire B0, quelqu'un contrecarrer le
noir et oublier le c. C'est
donc un autre sujet
sensible. Voulons-nous laisser la couleur du
véhicule sous forme de texte libre ? Ou voulons-nous le verrouiller
et l'avoir dans la liste ? agit de décisions que nous
devons prendre pour garantir que notre système sera
juste de la part des utilisateurs. Personnellement. Je préfère avoir des
couleurs dans une liste car les chances que les utilisateurs
saisissent des couleurs incorrectes
sont des couleurs qui n'existent
même pas sont
considérablement diminuées. la même façon que
nous avons l'identifiant de l'appelant. Il va s'
agir d'une clé étrangère. Laissez-moi donc revenir
un peu en arrière et je vais introduire les nouveaux
champs dans l'ordre. Très bien, donc en dessous de moi, je suis allé sauver public int
et je ne fais aucun niveau. Rappelez-vous donc pourquoi nous avons
dû le rendre disponible. Nous introduisons une
clé étrangère après coup, après qu'il y ait déjà
des enregistrements. Nous voulions donc nous
assurer que nous n'avons que très peu de conflits avec
les valeurs clés étrangères. Nous allons avoir
une autre propriété, qui sera
une propriété virtuelle
et qui va l'appeler couleur. On va l'appeler
couleur elle-même, taper couleur. On va l'appeler
couleur, pas de couleur. Regardez ça. Je peux juste faire des points de contrôle. Nous n'avons pas de
classe appelée couleur. Je peux donc voir générer
un type appelé couleur. Et il leur demandera
si vous voulez qu'il en ait besoin dans un nouveau fichier ? Je suis allé le voir, oui, parce que je voulais
désigner une nouveauté pour nous. , il est apparu en
couleur et cette erreur a disparu. C'est donc un bon moyen
rapide lorsque vous créez de nouveaux types et que vous ne les
avez pas créés vtable, que
vous videz ou
ce que vous devez faire. Visual Studio propose
des suggestions pour vous aider à être plus productif et à ne pas vous
concentrer sur les petites choses. C'est de la couleur. De quoi ai-je besoin ? Nous avons besoin de la liste des modèles. Le modèle va subir le même sort que celui que le
nom a souffert. Certains vont simplement
supprimer le champ de modèle. Il va s'agir d'un ID de modèle. Vous remarquerez que j'
y retourne toujours et que je corrige. Laissez quelque chose qui n'est pas majuscule ou comment une erreur d'
orthographe je jardine
toujours
parce que lorsque vous le faites correctement la première fois,
il monte sur le pare-feu. Une fois de plus, avec le modèle, je ne suis lié à
aucune bibliothèque. Je voulais vraiment
générer ma propre confiance. Et puis, comme vous le voyez, le modèle est en fait comme un mot-clé
parce qu'il s'agit d'un modèle. Vous m'auriez entendu
parler de modèles lorsque nous parlions d'
Entity Framework. C'est donc un peu risqué si
j'appelle simplement le
modèle de classe parce que je ne
sais pas avec quel autre nom ou quel autre type de données je
pourrais être en conflit. Je vais appeler
ça un modèle de voiture, juste pour être sûr. Le type de données que je crée s'
appelle modèle de voiture. Mais ensuite, je vais appeler le terrain
à l'intérieur de ma
voiture de classe, juste modèle. C'est bon ? Encore une fois, on le nomme
parfois différemment. Parfois, vous le nommez de la même façon si vous aviez
besoin de le voir, nous connaissons des problèmes, alors nommons ça de la même façon. Il s'agit du modèle de voiture, ID, du modèle de voiture et
du modèle de voiture de terrain. Pour nos nouvelles entités, de
quoi avons-nous besoin ? Ils ont tous besoin de
ce qui peut être coupé. Ils ont tous besoin d'une pièce d'identité. Ils auront besoin d'un nom, et ils auront tous
cette liste de cartes. En fait, ces champs peuvent être facilement
répliqués
sur tous ces champs. Donc, pour la couleur, nous
avons la couleur de la photo d'identité. L'affichage ici
serait couleur et non doux. Donc, vous voyez, je
copier-coller n'a rien de
mal à copier NPC1L1 pour comprendre le concept ou ce que vous
essayez d'accomplir, vous pouvez toujours copier et coller et accélérer
votre productivité. Très bien, nous avons ces
trois champs en couleur. Et puis je suis allé
faire la même chose dans notre classe de modèle de voiture en utilisant point de
contrôle pour inclure
toutes les références manquantes. Celui-ci serait alors ici
au nom de la discipline. Je peux voir un modèle parce que nous savons que nous
regardons la voiture, donc je n'ai pas besoin de dire le modèle
de voiture à l'utilisateur. Ce n'est que parce que
j'essaie d'éviter les conflits et que c'est plus expérimenté parce que
je l'ai déjà rencontré. Donc, ne vous sentez pas le moindre moyen
si vous vous demandez , d'
accord, comment puis-je savoir quand il peut y avoir
un conflit ou non ? Il s'agit parfois d'essais et d'erreurs. Parfois, vous le faites
lorsque vous essayez de courir, vous rencontrez le problème et
vous le modifiez. Pas de problème. Nous avons la couleur du modèle de
voiture, nous avons une voiture et
nous avons Meek. Non. Une autre chose que je vais souligner
à ce stade est le fait qu'
ils
utilisent tous des champs similaires
dans chacun de
ces modèles d' entités jusqu'à
présent le champ appelé ID. Permettez-moi de les écarter autant que ces
trois ont les trois voitures communes qui ne
sont pas
en commun, rien
d'autre en commun. Mais mon point est qu'
au lieu de répéter l'ID, ID, l'ID, l'ID, l'ID à chaque fois, une chose que vous
pouvez faire pour réduire à
nouveau la
répétition et augmenter extensibilité et la
partageabilité le code est introduit
ce que nous appelons un modèle de base. Je vais donc créer un nouvel
élément que je vais appeler une nouvelle classe
ou une autre
base parce que j'appelle ce
domaine en tout temps. Et puis je vais rencontrer
cette classe publique abstraite. C'est donc abstrait. Les classes abstraites
signifient essentiellement qu'elles sont là, mais vous ne pouvez pas en avoir une instance
seule. Vous choisissez aller avec la voiture. Nous pouvons instiguer nos
initiés ou une autre voiture ici, je peux simplement appeler une voiture quand
c'est une classe abstraite, vous ne pouvez pas appeler cette entité domaine
basée sur une entité n'importe où. Cependant, il est bon à des fins
d'héritage. À partir de là, je suis
allé dire prop int id sachez que j'ai
ce champ ici. Je peux tous les autres. Tous ceux qui ont besoin de
ce champ ID pour hériter simplement de
B sont des entités de domaine. Lorsque je fais cela avec un modèle de voiture, vous réalisez que
cette pièce d'identité s'éteint. Maintenant, le message qu'il
va me dire est que cette propriété ici interfère
avec celle héritée. Il y a donc un conflit, ce n'est pas une erreur, une erreur. Vous vous avertissez simplement que
si vous avez
l'intention d'hériter de la valeur de
celui-ci,
vous aurez toujours la priorité sur celle héritée. Mais le but pour moi d' hériter que je ne
veux pas le voir là. Chaque fois que vous avez des champs, afin qu'ils soient légers plus tard
dans votre carrière, vous pouvez commencer à
parler d'audit, où vous souhaitez stocker qui
a créé une date de 10 watts. Il a été créé. Lorsque vous avez ce
type de champs, il
vous suffit de placer tout cela
dans l'entité de domaine de base puis de vous assurer
que chaque corps qui est une classe de base de données hérite de l'entité de domaine de base que nous chaque classe aura
ces champs indépendamment. Ce nœud réduira
leur répétition. Donc, la prochaine fois que j'
aurai un autre cours, je n'ai pas à
passer du temps à mettre les
acouphènes appropriés qui héritent. S'il y a cinq
propriétés que la classe IVR doit avoir ou chaque table
doit avoir en commun. Je viens de les mettre tous dans la basse. Tout le monde en hérite. Très bien, donc je
vais le faire pour toutes mes entités de domaine. Donc, les voitures sont réglées, le modèle CAR est réglé, couleur est réglée et vous fait asseoir. Tout le monde hérite
de la base. Donc, si je voulais, comme je l'ai dit, il suffit de prolonger l'accessoire. Disons donc que je voulais
savoir quand il a été créé. Tellement prop, le temps. Date de création ? Non, je peux dire d'accord, je sais quand ce
modèle a été créé, ce MOOC a été créé lorsque cette voiture a été mise dans
le système, etc. Ce sont tous les éléments importants lorsque vous avez affaire
à systèmes. Avec ces changements en place. Passons à notre console
Package Manager. Et je vais juste
ajouter une nouvelle migration. Je vais donc dire que j'ai ajouté
d'autres tables de données sur les voitures. C'est mon message. Je migrerais et quel que soit le
message décrit cette activité le mieux
possible. Ensuite, laissez-le aller de l'avant et générez ce champ de construction de
migration. Oui, bien sûr, les capacités d'
interférer parce que tous
mes points de vue qui ont un modèle ne
vont pas crier. Une histoire similaire à ce que nous avons
vécu avec le nom. Mais encore une fois, il est
préférable de le faire lorsque nous sommes en phase de
développement, plutôt
que lorsque
vous êtes en production. Nous passons rapidement en revue tous
les champs
non commentés qui dépendent du modèle. Et je vais essayer encore une fois. Et cette fois, nous
obtenons notre migration. Examinons donc rapidement
la migration. Nous constatons que nous
supprimons la colonne d'un modèle où l'on ajoute la colonne pour la
date de création et qu'elle est ajoutée, en cours d'ajout au mixage. Nous ajoutons l'ID du
modèle de voiture aux voitures, l'identifiant de l'appelant et
la date de création, tous ceux qui
sont ajoutés aux voitures. Et ils créaient
des tables supplémentaires. Et puis j'ai assis
ces index et les clés étrangères qui n'
étaient pas là auparavant. Bien sûr, le dôme
ne fait que défaire tout ça. Devrions-nous effectuer une migration de suppression ? Après tout cela, nous sommes allés mettre à
jour la base de données. Et si tout va bien, c'est fini, c'est fini. Nous allons maintenant mettre à jour nos champs. Revenons donc à la section Créer. Create n'a plus de modèle de voiture. Nous avons maintenant l'ID du modèle, l'ID du modèle, et nous avons une validation
pour l'ID du modèle ou désolé, modèle de
voiture, c'est le
nom du champ. C'est l'ID du modèle CAR. Et puis, en fait, nous
allons avoir une liste de sélection, juste cela pour les modèles. Nous allons donc faire du
micro, puis sélectionner le modèle. Ensuite, nos articles ASP ne
proviennent pas du mix
vont provenir d'un champ appelé modèles
que nous allons nous asseoir dans quelques-uns. Nous devons également
étendre cette liste pour disposer d'une facilité pour nos couleurs. la même manière que nous devons
mettre dans les modèles. Nous devons entrer notre identifiant de l'appelant, l'identifiant appelant, sélectionner la couleur. Ensuite, cela
proviendra d'une liste de couleurs. Très bien, super. C'est donc tout pour ou pour créer. Et ce que je vais
faire juste pour rendre cela très facile encore une fois, en copiant et en collant
rien de mal. Je vais simplement passer à la
mise à jour et changer cette
pensée parce que ce sera vraiment
la même dynamique. C'est tout pour la
mise à jour de notre index, nous pouvons décommenter cela et
ensuite mettre l'ID du modèle de voiture. Ce sera donc le nom du modèle CAR. Dans l'index. C'est ce que nous voulons montrer l'année, le micro, le modèle de voiture. Et disons que nous voulions
mettre sur l'image, désolé la couleur aussi, ce serait le nom du point de couleur. Vous verrez l'importance
des champs de navigation. Ensuite, nous ne commentons pas. Il s'agit donc du modèle de voiture, du nom du
point, de la couleur, du nom du point. Très bien, donc cela
ne fait que prolonger cela. Il s'agit d'une partie normale de tout processus de
développement logiciel. Vous allez faire quelque chose. Vous allez recevoir des commentaires, puis vous
devrez annuler certaines choses,
refaire certaines choses , faire de nouvelles choses. C'est juste une partie normale
du développement logiciel. Nous avons donc mis à jour notre index
ou mis à jour ou créé. Donc, ce ne sont que les détails que nous
allons mettre à jour. Nous pouvons faire les autres
pour plus de détails. Également. Sachez que ce faisant, il m'est venu
à l'esprit qu'il y avait une chose que le client
demandait que nous n'avions pas placée c'est le numéro de plaque
d'immatriculation. Nous avons tout mis sauf le numéro de plaque d'immatriculation,
pas à ce stade. Encore une fois, deux options
s'offrent à vous. Il peut soit annuler toutes
les modifications que vous avez apportées à la base de données, puis insérer
le champ manquant. Et ensuite. Refaites la migration. Je ne vais pas
passer par tout ça. Ce que je vais faire à la place, c'est le numéro de plaque d'immatriculation
C Public. Je vais utiliser un flux
car la plaque d'immatriculation, bien qu'elle s'appelle numéro, n'
est pas vraiment un numéro. Parfois, c'est alphanumérique. Je peux que mon pays
soit alphanumérique. Et j'ai une règle
générale selon laquelle je n'utilise pas int et double ou aucun type de données
numérique à
moins d'utiliser ce nombre pour
une forme quelconque de mathématiques. J'ajoute simplement que même s'il s'appelle
numéro et bien que ce
soit strictement des chiffres
dans votre pays, il ne sera pas utilisé pour des collisions significatives
. Numéro complet Je ne stockerais pas numéro
complet en tant que numéro
dans la base de données. Je vais le stocker comme une force
parce qu'il y a quelqu'un qui met union ou des
crochets, et ainsi de suite, alors ce n'est plus
qu'un chiffre. Si le numéro de la plaque d'immatriculation
est fourni avec des lettres, juste pendant une chaîne de test n'
a aucune conséquence. Que ce soit tous les
chiffres sont alphanumériques. Je présente ce nouveau champ
et tout ce que je vais
faire est d'ajouter une autre migration disant que j'ai
fait le numéro de plaque d'immatriculation. Je continue à taper mon nom. Je suis désolé. Mais j'ai un terrain de construction. C'est parce que nous
n'en avons pas encore. Donc, ce que je vais faire, c'est de les
commenter sur la migration. Allons vite, essayons ça. Une nouvelle migration. Nom du bouton Personnes.
Je ne veux pas de nom. Je suis allé supprimer la migration et je suis allé la corriger et voir le numéro de la plaque d'immatriculation. Ensuite, nous obtenons la migration
où il est dit qu'il s'agit
simplement d' ajouter le problème de la loi sur la
colonne. Nous pourrions y mettre des validations. Donc, parfois, tu fais quelque chose
et ensuite tu es comme, oh, j'ai oublié cette étape. Revenons en arrière
et faisons-nous simplement. Les
numéros de plaque d'immatriculation seront nécessaires. Et je vais m'asseoir sur
une longueur de dix. C'est généreux dans mon livre parce que je ne pense pas que quelqu'un ait
vraiment un nombre d'étain dans mon pays, il y a six caractères assez
longs que vous allez
réserver ou baisser, ils ont jusqu'à six ans, mais
ça dit que c'est dix. Personne ne devrait donc pouvoir
écrire un essai dans ce domaine. Refaisons-le.
Maintenant, je dois supprimer la migration, puis
ajouter la migration. C'est une bonne chose que
Microsoft ne nous
facture pas chaque fois que nous
étions dans cette déclaration, nous pouvons le faire autant de fois
que nous en avons besoin pour nous
assurer faire
entrer directement dans la base de données. Vous voyez ici que c'est invar, char tin musulmans et non
nullable. C'est très bien. Puis je peux voir la base de
données mise à jour. C'est fait. Très bien, maintenant nous avons introduit
notre
numéro de plaque d'immatriculation. Je peux revenir à
mes avant-bras et je peux insérer cette entrée
pour le partage des licences. Très bien. Je peux donc ne pas commenter cela. Gordon, entrez, assurez-vous que
si vous l'expliquez en titien, mettez les leçons divisent le
nombre dans la forme. Faites ensuite la même
chose pour la mise à jour. Décommentez donc tout cela
et introduisez le champ de numéro
divisé de la leçon. Encore une fois, je suis
dans le même format. Donc, même si j'ai
besoin d'un nouveau champ, je vais juste le copier, coller, puis modifier
ce que je dois changer. Notez que tout
cela est introduit. Ce que nous devons faire, c'est
nous assurer que nous chargeons les autres listes
déroulantes. Donc, en ce moment, nous avons des micros. J'en ai besoin pour les couleurs
et un pour les modèles. la même façon que
nous avons dû charger le mix. Nous devons charger
les couleurs et les modèles. Nous pouvons donc facilement le
faire s'il vous plaît, sans dupliquer
l'effort dans GET et le post, je peux le faire s'il vous plaît et
voir une charge de données initiales. Ici. Placez les modèles pour qu'ils correspondent à
la liste contextuelle Models.swift. Ils sont tous du même type de format et c'est
vraiment des modèles de voitures. Désolé. Je n'ai pas donné de nom. C'est très bien. Ensuite,
nous avons des couleurs de
points contextuels et nous avons un nom d'identification. Ils remarqueront que je
reçois ces erreurs. Et si vous pouvez me dire pourquoi
je reçois ces flèches, alors félicitations Steve a fait
attention. Si vous ne pouvez pas
me le dire, c'est très bien. La raison pour laquelle nous
obtenons ces erreurs, permettez-moi de changer aussi rapidement. La raison pour laquelle nous obtenons ces
domaines est que le contexte ne connaît
rien des modèles ou des couleurs de voitures. J'essaie donc d'
accéder à des tables dont le contexte ne sait pas pourquoi il ne
ressemble pas à des contextes maintenant, alors que nous les mettons dans la base de données et que nous avons
créé une entité, nous devons quand même mettre La base de données est assise. J'ai besoin de voir. Veuillez frapper cette
entité appelée
modèle de voiture contre une table
appelée modèles de voitures. Et la couleur contre la couleur. Maintenant, c'est un bon
point pour pointer toutes ces nuances, car il est
facile de manquer ces
petites choses. Et j'ai commis ces erreurs
délibérément juste un point ou un péage
cohérent est très important. N'oubliez pas que cela
représente le nom de la table en indiquant le modèle de
voiture et les modèles de voiture DB set. Si j'avais mis cela
avant de faire la migration, la
migration aurait dit
que le nom de la table est modèles de
voitures et que le
nom de la table ici est des couleurs. Mais comme j'ai déjà fait la
migration, regardez ce qui se passe. Le nom de la
table est le modèle de voiture et le nom de la
table est couleur. Soyez donc très prudent à ce sujet. Quel que soit le nom de la table ici, vous voulez vous
assurer que vous reflétez ce côté avec le nom que vous lui donnez et que ce genre
d'apparence ne correspond pas à moi. Les voitures, moi. Je n'aime pas vraiment
quand c'est comme ça. Encore une fois, ils ne nous
facturent pas d'urine pour les migrations, la
maison et les immigrations. C'est vraiment à vous de décider et nombre de
fichiers de migration que vous voulez vraiment. Mais encore une fois, au fur
et à mesure que
vous vous entraînez davantage, vous commettez moins d'erreurs comme celle-ci et vous les verrez bien faire la première fois. Et puis vous vous rendez compte
que lorsque vous en avez besoin pour exécuter cinq migrations pour
faire une chose, vous venez d'écrire
plus directement. Maintenant que j'ai mis cela dans les modèles et les couleurs de
voiture, je peux aller sur la console Pockets
Manager et effectuer une migration. Et je vois des noms de tables
cartonnées, donc c'est ma migration. Quand je reçois ce
fichier de migration, je le vois
aussi, en supprimant les clés étrangères, supprimant les clés primaires, renommant la table, puis
il les rajoute. Il effectue tout un
processus étape par étape sur la façon dont il gère même le renommage de la table. Cela peut sembler simple, mais je n'ai jamais vraiment apprécié les bases de données
traversées dans le backend avant apprécié les bases de données
traversées dans le backend avant
de voir quel type de code de
migration était généré pour ce que
je percevais des opérations
très simples, n'est-ce pas ? Il est donc toujours bon de laisser les migrations gérer ce
genre de choses. Il vous suffit d'ajouter la migration
lorsque vous en avez besoin. Nous allons donc simplement mettre à jour la base de données. Et une fois que c'est fait, et encore une fois, si vous
rencontrez des flèches, vous n'avez qu'à entrer dans le code. Probablement dans le formulaire, par le formulaire de mise à jour aurait probablement un code
qui causera des problèmes. Il suffit de le commenter, faire ce que vous devez faire,
puis nous y reviendrons. De retour dans notre Create maintenant, vous
voyez que tout le monde est heureux. Nous pouvons charger les données initiales. Nous n'avons pas chargé ce chargement des données
initiales dans notre mise à jour, et je le suggérerais. Je vais donc juste décommenter ce code qui
causait des problèmes. Nous avons besoin de modèles et nous avons besoin des couleurs ici et nous sommes allés à
cette méthode privée. Tout ce que j'ai fait, c'est le copier-coller. Puis je suis allé le dire, aller de l'avant et générer des
propriétés pour les modèles. Vous voyez ça ?
Allez-y et générez une propriété, quatre couleurs. Maintenant, si je regarde le
haut, ils sont là. Utilisation de Visual Studio
comme outil de productivité. Cela vous aide à vous concentrer moins sur les petites choses et à
faire avancer les choses. C'est juste que je sais que j'ai
mes listes de sélection. Que dois-je
faire ? Je dois appeler la méthode initiale des données de
mon seigneur. Un. Lorsque je suis sur le point de
renvoyer la page, j'appelle charger les données initiales. C'est asynchrone
après notre pondération. Ensuite, si l'
état du modèle n'est pas valide, je dois l'appeler à nouveau les données
initiales. C'est ça. Très bien. Avec cela, nous avons
accompli beaucoup de choses. Et même dans ce cas, vous pourriez
probablement abstrait cette fonctionnalité intégrée dans une méthode d'assistance qui
le fait pour vous. Je ne vais pas encore être aussi technique et
compliqué. Je ne fais que vous donner les idées, mais vous voyez toujours
que nous devons
répéter cette méthode ici. Et dans la création et peut-être d'autres pages où
vous devrez peut-être les répertorier. Donc, si vous voulez réduire les répétitions et c'est à ce moment
qu'il a commencé à voir, d'accord, comment puis-je créer un fichier avec la méthode que plusieurs
endroits doivent utiliser ? Je peux donc simplement l'appeler et avoir tout le code en un seul endroit avec
tout cela dit et fait. Cependant, nous avons
beaucoup accompli pour avoir
étendu les tables. La table de voiture que nous avons
crée de nouvelles tables et nous avons facilité la création d'une
nouvelle liste déroulante neige. Quand nous reviendrons, nous
allons faire l'échafaudage pour les nouvelles tables
parce que nous l'avons fait avec micros afin que nous puissions
maintenir la liste des mixages. Nous devons le faire pour les
couleurs et les modèles. Ensuite, nous
examinerons également comment
contrôler quel modèle
apparaît lorsqu'un micro est sélectionné.
20. Améliorer les formulaires et les validations de collecte des données - Partie 2: Bonjour les gars, bienvenue. La dernière fois, nous nous sommes
arrêtés de mettre nouvelles tables et de mettre
dans les listes déroulantes, mais nous devons réellement mettre dans les plages de foule
autour de ces listes. Je vais en faire un avec vous, puis je vais vous
mettre au défi de mettre pause la vidéo et de faire
le reste par vous-même. Faisons donc l'échafaudage
pour nos pages de modèles de voitures. Ensuite, nous pourrons
ajouter un nouveau dossier. Je vais juste dire
des modèles de voitures. Ensuite, au lieu de cela, j'ai ajouté une nouvelle page Razor, pages
Razor en utilisant
Entity Framework brut. Ensuite, nous sommes en train de
modéliser le modèle de voiture. Allez-y et appuyez sur Ajouter
et à exclure toute erreur, ce qui serait une fois parce
que vous devez probablement revenir aux
versions précédentes qui auraient fonctionné. Vous pouvez voir que vos modèles de voitures ont
été échafaudés. Je vous encourage à
faire une pause ou à faire la même chose par
vous-même pour les couleurs. Si tout s'est bien passé, alors vous devriez avoir un dossier dans votre page qui s'appelle couleurs. Et toutes les pages grossières. Ce que je vais faire, c'est d'aller
rapidement à la mise en page et ajouter les nouveaux éléments. Je vais donc supprimer la
confidentialité parce que je n'utilise vraiment pas
ce lien de confidentialité. Nous avons donc des voitures, des
modèles mixtes, nous avons des couleurs. Bien sûr, il vient de changer le chemin d'accès à la racine de l'index barre oblique de nom
déplié. À un autre défi
que je vous
donnerais c'est si vous êtes intéressé à prolonger de la même manière
que nous avons fait la suppression des voitures. Rappelez-vous donc dans la page d'
index que nous avons fait toute
l'alerte de la suite
et
le formulaire de suppression sur jQuery pour remplir
le formulaire Supprimer et le gestionnaire personnalisé
pour la suppression. Je vous encourage à
essayer de le faire sur les autres. C'est là que la pratique
intervient sur les modèles de voitures. Lorsque je regarde la
liste des modèles de voitures, que se passe-t-il si je voulais les supprimer ? Eh bien, nous pouvons mettre jQuery et tout et
le mettre dans un gestionnaire personnalisé. Et vous n'auriez pas besoin
de la page Supprimer. Je vous encourage à l'
essayer par vous-même. Nous l'avons fait une fois, examiné comment nous l'avons fait et
appliquons les connaissances, car c'est vraiment la façon dont vous vous
améliorez en tant que développeur. Essayons le devoir ou l'application. Passons aux modèles et je clique sur les modèles et
rien ne se passe. Et c'est à cause du mauvais nom de
dossier dans la mise en page. Alors, mon méchant Shun, rafraîchissez-vous. Essayez encore. Si je vais voir des mannequins, nous y sommes. Maintenant que nous sommes dans les
modèles de voitures pour cela, je suis allé ajouter un nouveau modèle et ce serait
un Sony pour Nissan. Maintenant, l'avis l'a créé. Je ne veux pas que l'utilisateur me
dise quand il a été créé. C'est quelque chose qui
devrait être automatique, que je veux que
cela se produise en arrière-plan. Je ne veux pas que cela
ne soit pas à l'écran pour que l'utilisateur voir et outil qui doit se produire
en arrière-plan. Gardez cela à l'esprit plus tard lorsque nous commençons à
regarder les modèles. Parce que lorsque nous
utilisons les modèles de données, il
s'agit de l'une des
limites dont nous avions besoin pour la base de données ou ne le voulons
pas pour l'interface utilisateur. Il y a des moments où nous devrions
créer une séparation entre ce que nous avons
montré à l'utilisateur et ce que nous stockons réellement. C'est l'une de ces situations. Nous ne voulons pas afficher ce champ à l'
utilisateur, mais nous devons le
stocker n'importe où. Je vais simplement continuer en
voyant que le modèle est Sony. Allez-y et créez un
intermédiaire de notes ISI créé
est nécessaire. Pourquoi est-ce nécessaire ? Parce que nous n'avons pas mis
leurs besoins au-dessus de cela. Cependant, le type de données
qu'il utilise est le temps,
qui, tout comme l'int, donne une exigence automatique. Je vous montre juste que vous tenez
la dynamique de toutes ces choses quand
nous mettons les choses en place. Si nécessaire, pour prendre en compte
le tableau complet, ou lorsque nous rencontrons ce
genre de problèmes, comment nous pouvons travailler nous-mêmes, ils sont plus à comprendre
pour les faire nous-mêmes. C'est pourquoi j'ai créé la
date requise désolé, est têtu et
nous dit que la chaleur est nécessaire, donc c'est très bien pour l'instant. Juste pour aller au-delà de cette maison, veuillez ajouter
une date créée. Et on y va. Nous
pouvons donc ajouter quelques éléments. Spider, c'est Ferrari, vient de créer ça aujourd'hui. Et nous avons Toyota. Harrier a été le
premier dans notre système. Quoi d'autre ? Désolé, je ne me souviens
pas du mélange que nous avons, alors laissez-moi juste regarder le mix. Nous avons Nisan. J'ai
supprimé les autres, donc nous avons au moins
une Ferrari 2171. C'est bien. Dans nos modèles. Nous en avons. Non, j'ai besoin de couleurs et je vais
rester simple. Je vais juste dire
noir et bleu. Et bleu. Quand je vais créer une voiture, voitures et je dis Create New. Je reçois la liste déroulante pour moi. Je prends le modèle de voiture. Mais je les vois tous. Je pourrais facilement dire
Toyota Spider. Ensuite, nous voyons l'
identifiant de l'appelant, noir et bleu, l'année, disons 2020. Et le numéro de plaque d'immatriculation, comme je l'ai dit, dans mon pays, peut être alphanumérique, donc
il pourrait être 1234 AB. C'est le
format général que nous créons. Nous voyons au moins
qu'il a été créé, mais nous ne voyons pas de modèle, nous ne voyons pas de couleur. Où voyons-nous la couleur
moderne ? Photo une que nous venons de créer. Nous ne le voyons pas
pour la même raison. Nous n'avons pas vu le micro au départ parce que dans notre requête lorsque
nous passons par l'index, permettez-moi
donc de
passer à l'index des voitures dans cette requête. Nous devons inclure. Je dois donc m'
assurer de dire inclure. Ce que je fais, c'est juste briser les lignes pour
pouvoir contrôler D
là-dessus et répondre à ma
vie beaucoup plus facilement. Travailler plus intelligemment, pas plus dur. Lorsque vous obtenez les voitures,
incluez le micro, le modèle de voiture, la couleur, puis la dernière version de Visual Studio Code,
appliquez des modifications de code. Allez-y et profitez de l'actualisation, et nous assistons au moins
à un retour de couleur. Allons donc déboguer et voir pourquoi nous ne
voyons pas le modèle. J'ai donc fait tous les Includes. Vous pouvez continuer et redémarrer si vous exécutez déjà
en mode débogage, j'ai mis un point d'arrêt ici que lorsque les
données
se chargent, il pour
que lorsque les
données
se chargent, il me permette d'entrer
et d'interroger cinq voitures. Lorsque la voiture que je viens d'
ajouter doit faire
une pièce d'identité, mais elle n'a pas d'ID de modèle de voiture. Cela signifie que quelque chose a
mal tourné avec le formulaire entre le formulaire soumis
et celui qui arrive ici, quelque chose s'est mal passé. C'est très bien. Passons donc à la Créer et voir ce qui
pourrait manquer. C'est donc là le problème. Ouah. Copiez NPS. Bien que ce soit bien. Soyez juste très prudent. Je le liais toujours
au mauvais champ, donc
ça devrait être micro. Je l'enregistre, actualise
ou applique des modifications de code. Allons essayer encore une fois. Allez-y et chargez
le formulaire Créer. Nous arrivons au bloc d'araignées 1990. Et je vais simplement réutiliser ce numéro partagé de
leçon. Supprimez ces points d'arrêt. Donc ça va juste de l'avant et se
charge et on y va. C'est le bouton qui arrive
ou la reliure
se produit comme on s'y attend. C'est bien. C'est merveilleux.
Les batailles ont eu lieu. Si nous allons à Edit nulle part en voyant
tout ce que nous avions Poutine. Si je change ça
du noir au bleu et de Toyota pour embaucher
parce qu'ils réalisent, oh, j'ai commis une grave
erreur et je clique sur Enregistrer. Ensuite, nous voyons que nous sommes de
retour à la case 1. Nous sommes sur le point de carrer
un car j'ai mis à jour la création et j'utilise le même
code ici dans la mise à jour. Cette erreur persiste dans la mise à jour. Les tests de régression
sont
toujours importants chaque fois que vous introduisez des
modifications à votre système, revenez et assurez-vous que ce qui fonctionnait
autrefois fonctionne. Laissez-moi essayer encore une fois. Sauvez et nous y allons. Non, la modification fonctionne, crée ces fonctions, toutes
ces fonctionnalités fonctionnent. Est-ce que le besoin fonctionne ? Allons vérifier. Très bien, donc tout
fonctionne comme nous le soulèverons. Le prochain gros billet
est que lorsque nous créons, nous voulons nous
assurer que seul le modèle
respectif par rapport
au micro existe. Cela signifie que lorsque je
crée un modèle, je dois lui dire à
qui il appartient. Et puis, lorsque je sélectionne
un micro lors de la création de la voiture, je dois m'assurer que je
ne charge que les modèles
qui se rapportent à tous. Très bien, donc c'est
très important, c'est très important. Ils ont insisté
à part lors de la réunion. Voyons donc comment
nous pouvons le faire. La première chose
à faire est donc d'introduire un identifiant de micro. Nous devons donc créer une
relation entre le modèle et le micro et
y réfléchir de manière conceptuelle. Parce que, je veux dire, si vous avez une voiture et que vous savez que vous avez certaines marques
hors des voitures cette fois-ci, certains modèles. C'est
notre relation. Donc, si vous deviez faire des pauses de
mots croisés, Laura, une de ces activités de
correspondance de mots croisés où les marques sur la tête, sur les modèles de l'autre
côté et elle devrait correspondre celles qui se rapportent
l'un à l'autre. Ce sera le même concept qu' une clé étrangère lorsque vous tracez cette ligne entre Toyota et
Harrier ou Nissan et Sony, c'est-à-dire qu'
ils sont liés. Cette relation est donc
considérée comme une clé étrangère, c'est
ce que nous avons
fait jusqu'à présent avec la voiture. Laissez-nous. Sortez du mode test et
revenez en mode extension, passez au modèle de voiture. Je suis allé présenter
une clé étrangère. J'ai déjà ce
genre de clé étrangère ici en marque, pièce d'identité et voiture. Je ne fais que copier ça, sautant sur le modèle de voiture. Et puis je suis allé le présenter. Maintenant, j'ai ce champ pour lui
faire savoir qu'il devrait
être lié à un micro. De la même manière. cause de cette relation, je peux passer au MIC et lui
faire savoir qu'il a une liste de modèles de voitures
et voir comment cela fonctionne. Cela étant fait, je suis sûr que vous l'avez deviné, nous avons besoin d'une nouvelle migration. Ajoutez donc migration,
relation modèle, c'est mon message. Ensuite, nous obtenons le fichier de migration, ce qui ne fait rien d'amusant. Nous savons donc déjà que
nous pouvons l'examiner. Nous savons juste que d'accord,
c'est ce qu'il faut. Nous pouvons mettre à jour la base de données
et, lorsque c'est fait, nous pouvons nous déplacer
dans la foule pour nos modèles, modèles de voitures. Nous devons étendre
la création Peytchev, une liste déroulante pour le mix. Et nous avons besoin de
l'édition, désolé. J'ai déjà ce genre
de code. Encore une fois, travaillez
plus intelligemment, pas plus fort. Je vais donc simplement
prendre ce groupe de forme. Je vais sauter
par-dessus les modèles de voitures et je vais
supprimer la date de création. Vous pouvez donc
simplement supprimer le champ. Vous ne voulez pas
le sentir sur la page, vous le supprimez. Ici. La reliure serait modèle
CAR Dot Make ID
a été tirée du mix. Cela ne semble pas
exister, mais c'est très bien. Je suis allé copier ça aussi. Accédez à l'onglet Edition. Je ne veux pas que la date soit créée. Je dois conserver la porte d'identité. N'oubliez pas,
gardez toujours le caché. Mais je ne veux pas ce
sexe et je voulais juste faire partie des cartes d'identité. Très bien, alors je vais avoir cette charge de données initiales pour
que la requête initiale que nous exécutions lorsque nous devions remplir
les données de la page. Je vais donc juste
sauter sur les modèles de voitures. Je suis allé utiliser la méthode, suis allé enlever l'excédent. Je n'ai pas besoin de ces
deux-là. Je n'ai besoin que de micros. Je suis donc allé créer
cette propriété. Très bien. Ensuite, incluez
toutes les références manquantes. Alors, je vais juste faire mon
seigneur, premier appel de données. Et je ferai la même chose
avant de retourner la page. Et tout cela est dans
la création d'un lavabo, sorte d'accélération parce que c'est des choses
que nous venons de faire et je ne fais que copier
et coller le code que nous avons déjà
traversé. détail. Nous ne faisons donc rien de
spécial pour le moment. C'est la même chose. Nous ne faisons que réutiliser le
code que nous avons écrit et nous connaissons les concepts selon lesquels, si
nous le faisons pour la requête, nous devons le faire
aussi pour l'édition, ce qui est de le mettre ici, saigner et de générer
cette nouvelle propriété. Ensuite, nous passons notre appel, notre charge de poids,
les données initiales. Nous avons fait cet appel
ici également dans les portes avant de retourner
le pH que nous avons terminé. Nous avons fini de
faciliter l'identification de la marque pour nos modèles. Alors, laissez-moi courir, sautez sur nos modèles créés. Et vous verrez ici que nous allons
obtenir la liste hors micro. Nous avons le modèle
théorique de capacité, quelqu'un pour dire Sony. Et vous êtes apparenté à Nissan. Je ne veux pas créer
celui-là. Très bien. Donc, en fait, je
vais juste supprimer toutes les précédentes. Il ne clique donc pas sur eux au milieu, les
ouvre dans de nouveaux onglets, les supprime. Donc je n'ai pas encore
étendu ce genre de choses, la fonctionnalité principale pour l'instant. Mais ce n'est pas un problème. Il fonctionne toujours. Supprimez donc. Très bien. Oh, je pensais
qu'ils fonctionneraient bien, ils ne sont pas dans la suppression conflit avec quelque chose
et le mari a résilié. Et je pense que c'est uniquement
parce que je supprime quelque chose qui ne
devrait pas aller. Supprimé. Cette erreur de suppression
est vraiment due au fait que nous avons créé une voiture qui
entretient une relation avec cette bière qui est dans la mienne. Permettez-moi donc de le
souligner à partir de la migration. Comme je l'ai dit, chaque fois que
nous voyons des flèches, je ne patine pas les flèches de
politique de plinthe parce qu'
il y a des moments où vous apprendrez les concepts
sans voir l'Arizona quand vous arrivez en
Arizona et beaucoup de choses faites-le, c'est bon de voir l'
Arizona les comprendre. Lorsque nous avons créé les
migrations, la plupart, sinon toutes les
clés étrangères ajoutées, ont été ajoutées avec le fait
de limiter indûment . Si vous n'êtes pas si
familier avec les bases de données. Ce qui se passe, c'est que vous avez l'action référentielle qui vous
permet de dire lorsque je supprime l'enregistrement parent, ce qui signifie que vous supprimez déjà
une voiture. Je n'avais pas besoin de modèle de voiture. Supprimez ensuite toutes les voitures
qui ont cette association. Si je devais supprimer une couleur, supposons que je supprime
ce noir et que j'ajoute 50 voitures dans la
base de données en noir. Si vous le vouliez. Quand
je supprime le noir, il supprimait les
50 voitures en bloc, puis vous verriez une cascade. L'action en cascade signifie supprimer tout ce qui est lié
à cet enregistrement. Ce que nos migrations nous
confèrent ces restrictions, c'est
pourquoi nous obtenons
cette flèche parce
qu'elle indique que vous ne devez pas charger l'outil, supprimer un enregistrement qui
contient 200 enregistrements. Quelque chose se fonde donc
sur ce dossier. Je sais donc que je compte sur le Harrier
exigé que nous ayons,
je ne peux pas supprimer
Harrier tant que je n'ai pas supprimé toutes les voitures qui sont des transporteurs. Le Dr Glenn supprime donc tous
les enregistrements de voitures
qui sont des embauches, puis le retour et la densité. Oui, je voulais faire le pneu. C'est essentiellement
ce que cela dit. C'est une erreur, mais
ce n'est pas vraiment, vraiment, vraiment une erreur. C'est très bien. Je vais juste y aller
et en ajouter de nouveaux. Je remarque que parce que j'ai
retiré la date de création, c'est par défaut un acte. Donc, cela ne
me dit pas que c'est nécessaire parce que ce n'est pas sur cet
écran pour penser que c'est nécessaire, mais quand rien n'est
fourni,
il obtiendra une
valeur par défaut comme celle-ci, tout comme ça. dans T, si rien n'est fourni,
il sera 0 par défaut. Ce serait une araignée. Et l'araignée est vraiment
relative à Ferrari. Et l'autre que nous avions, ajoutons juste une autre barrière. Et celle-ci est Toyota ou
laissez-moi en utiliser une autre. Permettez-moi d'utiliser lexoffice ou supra. On y va. Donc,
supra, Toyota crée, nous avons au moins
trois disques directement liés au mix. Un statut qui
est toujours libre. Donc, quand je vais dans les voitures
et que je vais créer, attends à ce que je
ne vois pas
tout ce qui se trouve dans la liste déroulante comme ça. Si je clique sur Toyota,
je ne devrais voir que Toyota ne
concerne que si je clique sur Ferrari au moins les commutateurs et
la propriété sur les modèles Ferrari, c'est ce
que l'utilisateur attend. De toute évidence, ce
n'est pas le cas maintenant, mettons en œuvre
une logique pour y répondre.
21. Ajouter des listes de déroulement en cascade avec JQuery - Partie 1: Très bien, les gars. Ainsi, lorsque nous étions l'année dernière, nous étions en train de dresser notre
formulaire et de mettre en place nos listes déroulantes pour des couleurs de modèles
mixtes. Non. Le prochain gros ticket est
qu'ils veulent que lorsqu'ils
sélectionnent le micro dans la liste, il filtre automatiquement la liste des modèles à afficher. Passons en revue ce que
nous avons en ce moment. Nous avons notre formulaire qui contient tous les micros répertoriés dans
tous les modèles répertoriés. Donc, je ne veux pas déchirer un trou. Je change de micro. Nous voyons toujours
tous les modèles. Très bien, cela signifie que
lorsque je choisis au soleil, il ne devrait y
avoir de soleil que sur
la base des données qui se trouvent dans la
base de données en ce moment, lorsque je choisis la férocité, cette liste devrait être reconfigurée
et n'afficher que araignée. C'est ce que nous
devons mettre en œuvre. Et l'outil que nous
allons utiliser est JavaScript ou jQuery. Jquery a cette fonctionnalité
appelée ensembles ajax de ceux qui font
réellement ce que nous appelons des appels
asynchrones, dit le code côté serveur
du côté client. En d'autres termes,
nous serons à l'intérieur de la section HTML statique du cheval, mais nous allons frapper le
service dit mythes, charger la requête,
récupérer les données, puis les amener buccal
avec le déclin et dit tout en temps réel, commençons cette fête en allant sur notre
page Créer pour les voitures. Et ce que nous allons
faire, c'est remplacer la valeur id des modèles. Nous allons également ajouter
la valeur id du mix. Maintenant, une explication rapide. N'oubliez pas que le tiret
ASP quatre est assistant de balise
qui
, lorsque la page est
rendue, nous
donnera l'attribut name
ainsi que l'attribut ID. Maintenant, quand vous avez ce genre de nom
à double canon
comme le point de voiture Meek ID. La carte d'identité elle-même
va sortir alors que voiture soulignera Meek ID. Je ne veux pas
une pièce d'identité aussi compliquée, donc je peux toujours la
remplacer par une pièce d'identité simple. J'ajoute donc ID égal
à mix dans la liste déroulante de mixage. Id équivaut à des
modèles aux modèles de lutte. Ensuite, je dois
ajouter du JavaScript. N'oubliez pas que ce que nous
voulons, c'
est que lorsque vous modifiez
la valeur de l'ID du micro, nous allons charger ou
modifier
dynamiquement les valeurs disponibles dans la liste déroulante du modèle. Je vais commencer dans mes groupes d'application sexuelle
avec une balise de script. Rappelez-vous
que c'est pour cela que cette section est dédiée, je
voulais écrire du JavaScript. Créez toujours cette section. Ensuite, vous insérez
votre balise de script, puis vous pouvez continuer. Commençons par
nos gestionnaires d'événements. Je suis donc à la recherche d'un événement de changement de valeur dans
la liste déroulante de mixage. Nous avons vu que nous pouvons surveiller un
événement de clic sur un bouton. Vous pouvez donc surveiller n'importe quel type d'événement sur
n'importe quel type de contrôle, le type d'événement que
vous choisissez d'utiliser, l'ISR par rapport à l'opération
que
vous effectuez. Je veux que lorsque je modifie la valeur de
l'ID ici ou la valeur Meek ID, cela fera
autre chose. Je vois. Surveillez mon élément avec l'os ID Sumer ne voudrait pas
un élément par ID. Nous voyons un hashtag, puis voyons le mix d'identifiants, voyons à quel point c'est plus facile. Ensuite, l'événement que nous
surveillons est un événement de changement, va regarder pour voir
quand la valeur est modifiée. Et puis nous spécifions que nous voulons exécuter cette fonction
chaque fois que cela se produit, fonction pour obtenir
le rouge tournant. Comme je l'ai dit, une
clause de retraite en plein air dès le départ. Et c'est pourquoi je n'oublie pas. Ensuite, cassez
quelques objectifs et nous pourrons commencer à écrire
le code ici. La première chose que je
voulais faire dans cet événement, c'est d'obtenir la valeur. Il a changé. Quelle est la valeur du nez ? Je vais dire que var make
ID est égal à cela. Cet objet représente
le contrôle déclenché par l'événement,
cette valeur de point. Ensuite, je veux
placer les valeurs par défaut
à l'intérieur du modèle. Donc le mensonge de
codé dur que ce que je vais faire, c'est juste le retirer de la sélection. Je ne suis donc pas difficile de le
coder parce que nous allons toujours changer les valeurs. Ce que je veux que le HTML soit
ce bit de texte
par défaut. Je vais donc dire, procurez-moi
l'élément par les modèles d'identification. N'oubliez pas, sélectionnez des modèles d'identification, donnez-moi cet élément et définissez le code HTML de cet
élément comme option. Cela aura donc peur, suffit d'ajouter le code HTML, quel que soit le contrôle. Il ajoutera simplement le code HTML, tout ce que vous mettez ici avec
celui à l'intérieur des balises. Chaque fois que vous vouliez manipuler
ce qu'il y a à l'intérieur d'une étiquette, j'ai
peut-être une div vide. Nous voulons y mettre un autre
élément à la volée. C'est exactement ce que nous faisons. Nous avons maintenant la liste vide. Oui, il récupère les éléments
des modèles et je pourrais
laisser ou supprimer cela
parce que lors du premier chargement,
je ne veux pas qu'il soit supprimé, que
chaque fois que cela est modifié, il devrait au moins
conservez cette valeur par défaut. balise Html. Et ensuite, nous allons être
l'appel Ajax pour aller chercher les valeurs de
la base de données et les
ramener ici. Donc pour ce faire, je suis allé voir un point de
signe de dollar obtenir JSON. Il s'agit donc d'une méthode jQuery qui me permet d'appeler une URL. J'allais mettre des guillemets
vides pour l'URL. Cela me permet également
de transmettre des données. Donc, dans ce cas, je dois obtenir les
modèles en fonction l'ID du micro, le nom du paramètre. C'est que je vais
utiliser ce micro d'identification deux-points. Et la valeur et la
transmission sont Meek ID. Il s'agit donc du nom du paramètre. C'est la valeur que j'ai remarquée
lorsque je mets en surbrillance
cela, elle met également en évidence la variable. Il s'agit de la valeur de
n'importe quelle valeur
provenant de l'événement de changement. C'est ce que je
passe à cette méthode. Ensuite, j'ai une virgule, et puis cette fonction dit
essentiellement, quand elle réussira, je le ferai. Et il faut, ou il
a la capacité de prendre
un paramètre appelé, je l'appelle des données. Les données ici représenteraient
tout ce qui est revenu de l'appel latéral du serveur. Je vais laisser
cette coquille
d' une fonction ici. est à l'intérieur de cette zone que nous allons faire avec la magie
du remplissage de la pente. Mais c'est le modèle de base. Nous avons donc une URL, laquelle d'entre elles place passe au-dessus la valeur make ID qui va être utilisée pour
filtrer la liste des modèles. Ensuite, quand nous aurons obtenu, mais qu'ils se modèlent, nous allons mettre en œuvre
l'action dans ce domaine. Je suis allé faire une pause ici un peu. Et je vais
passer au fichier de code
pour cette création. Et ce que nous devons mettre
ici, c'est une méthode qui sera réellement appelée chaque fois que
l'événement de changement se produira. N'oubliez pas que l'ajax nous
permet de rendre service. J'ai reçu des appels du code côté
client. Ici. Je vais mettre ce que nous
appellerons un autre gestionnaire. Rappelez-vous donc que ces
méthodes sont appelées gestionnaires. Et celui-ci va être
des résultats JSON. Public AsyncTask
renvoyant le résultat JSON. Et ça va
se passer, en marche. Alors rappelez-vous que je
disais que vous avez sur get, c'est un mot clé sur post, c'est un mot clé. Quand nous voulons un 100 personnalisé, je vais dire sur Git. Et appelons ce modèle, ou vous pouvez même l'appeler une voiture mobilisée si vous
voulez être explicite. Donc, pour obtenir des modèles de voitures, cela nécessite un entier
qui serait Meek ID. C'est le paramètre que nous voyons que nous allons
envoyer. Nous devons recevoir cette valeur à l'intérieur
du paramètre. Cette méthode doit ensuite
renvoyer des résultats JSON. Alors pourquoi devons-nous
exécuter la requête ? Deuxièmement, nous devons y assister
pour obtenir des résultats. Nous pouvons le faire en une seule ligne, je le ferai en deux juste pour montrer que les modèles
VAR seraient égaux
aux modèles de voitures contextuelles. Et puis il est assez facile
de le dire de la liste. Vous voyez donc que les deux
listes asynchrones vont simplement
renvoyer toutes les
choses de la liste, ce que nous avons
fait ici,
mais ce n'est pas
nécessairement ce que nous voulons. Nous voulons qu'il soit filtré. Je dois donc injecter
ce que nous appellerons une clause
condition ou où. Je dois dire où. Ensuite, nous avons mis notre expression
Lambda. Donc, q est mon jeton cette fois. Et je suis allé voir
où la colonne de MC ID correspond à
la valeur transmise
par le paramètre. Une fois que nous en sommes arrivés à tous
, je dirai simplement renvoyer nouveau résultat JSON avec
les données des modules. Ce que cela va faire, c'est prendre tous les objets de base de données, les données du
stockage de la base de données plutôt que les modèles. Et puis cela reviendra
tout cela sous la forme
de gens appelés JSON. Cela se plaint
parce que j'en ai besoin, j'attendrai l'appel
à cette méthode. Non, j'ai une idée du
chemin que je dois appeler pour récupérer les données
vers le JavaScript, je peux maintenant dire GetJSON, votre URL ou le chemin
que vous devez appeler. Ce serait des
voitures slash, slash créer. Je suppose que c'est familier. Ce sont des cartes mémoire que la barre oblique de dossier de voitures crée
serait notre fichier Create, mais notre méthode Create file ou
create qui a le sur Git et le sur post
a également sur les modèles de voiture. Et c'est notre
responsable de cette situation. Je dois donc voir. Un slash gars slash Create. Ensuite, je transmettrai une chaîne de requête dans l'URL
pour voir que le gestionnaire que vous devez appeler dans la page Créer une page est
égal à celui des modèles de voitures. Remarquez la
convention de dénomination ici. Il s'appelle On Get. C'est un mot-clé, c'est une expression clé recherchée par les
pages Razor, mais la méthode elle-même s'
appelle les modèles de voitures. Je vois que votre
manutentionnaire est un modèle de voiture, donc je n'ai pas à mettre la
guitare, la partie OnPause. Je vois juste des modèles de voitures
appelées. Après tout cela, nous avons défini l'URL
et nous avons les données,
ou du moins ce qui doit
être possible en
tant que paramètre que nous sommes
censés obtenir. Mais ces données, ce que
je vais faire, c'est parcourir les données et remplir manuellement
la liste déroulante. La raison pour laquelle j'aurais mis
cette ligne est que chaque fois que je fais du moteur
la liste déroulante mixte, je veux réinitialiser. Donc, en appelant simplement cette
ligne va vider
tout le HTML et il ne
restera que ce que j'ai mis
ici en tant que HTML. Non, je dois m'
adapter aux données. Mais dans le reste du HTML, le signe
dollar point chacun est un moyen que je verrai pour
chacun en JavaScript. Et la collection
proviendrait de données plus variables ici. Les données représentent donc le nouveau résultat JSON
renvoyé. Pour chacun d'entre eux. Fondamentalement, les objets dans les données
exécutent cette fonction où j'obtiens une clé et
appelons cela une valeur, une clé et une valeur. Ensuite, nous ouvrons et
fermons cela et un point-virgule. Je n'oublie donc pas. Donc, dans cette méthode FoReach, je vais simplement
définir à quoi
devrait ressembler une option. Donc l'option var est égale à et je vais voir l'option de signe
dollar. Donc, signe dollar,
option d'accolade
ouverte, option d'entrailles ouvertes
tout comme l'étiquette. Nous voulons donc cette étiquette
Upsilon là. Je vais ajouter un attribut. N'oubliez donc pas qu'un
attribut très essentiel à une
option déroulante serait la valeur. J'ajoute cet attribut et
je vais lui dire que sa valeur est la valeur point d. sa valeur est la valeur point d. Car rappelez-vous que lorsque
cela renvoie la liste des modèles ou une table de modèles va nous
rendre
l'ID, gracieuseté de l'héritage
de l'
entité de domaine de base donne également un nom de vodka. Oui, on parle de
Meek ID et de la liste des voitures. C'est très bien, mais nous avons
besoin de ceux qui ont vraiment besoin l'ID pour la valeur et
du nom de l'affichage. Je peux en déduire que
le résultat JSON, qui nous
renvoie simplement des résultats identiques ou
le résultat d'un tas d'objets de la même classe que
nous venons de regarder. Il va certainement avoir la section valeur, un champ ID. Et puis je suis
allé ajouter point txt comme nom
de valeur pour chaque option, pour chaque valeur ou chaque chose qui
revenait à travers les données. Obtenez la valeur. Créez ensuite une option dans
laquelle vous placez
la valeur en tant qu'
attribut et texte, qui sera ce qui se trouvait
entre l'ouverture et la fermeture. La section qui
indique Sélectionner un modèle, qui prend pour nom valide. Une fois que j'ai créé une option, la prochaine chose
serait de l'ajouter. Je vais juste voir les
modèles s'ajouter à, mais juste ajouter l'option. Donc, ajouter savoir
ajoutera à la fin de
tout ce qu'il y a là-dedans. Donc, quand je dis point HTML, il sera vide Totalement le
réinitialisera à
la valeur que je veux ici. Si je le voulais vierge, je pourrais simplement dire que votre
code HTML n'est pas vide. Votre ischium, il n'
y a pas d'adoption. Cependant, dans ce cas, je ne veux pas
nettoyer les toilettes. Il est déjà
nettoyé avec la valeur par défaut. Non, je voulais simplement ajouter les autres options, la valeur par défaut. Maintenant, avec tout cela, ce que je vais faire est d'
introduire ici une petite
méthode que j' utilise pour déboguer appelée console.log. Chaque fois que vous essayez de faire votre JavaScript ou
jQuery et que vous ne
savez pas si ce que vous
faites fonctionne ou quelles valeurs sont
transmises sont définies. Vous pouvez toujours créer un
fichier console.log qui sera imprimé dans la
zone de la console de votre navigateur, vous
montrant
ce que vous imprimez. Je suis donc allé faire un journal de
console pour le Meek ID juste pour
m'assurer que nous obtenons valeur
du panier chaque fois qu'
il y a un changement. Et je vais également ouvrir une
session de la console sur les données ici même lorsque l'appel
JSON sera réussi. Parce que vous verrez alors à
quoi ressemble vraiment JSON si vous n'êtes pas très
familier avec. Ce dont je parle
quand je vois Jason, disons que c'est une aldose pour contrôler F5 ou plutôt je le
ferai en mode débogage, définissons un point d'arrêt ici que nous
puissions voir exactement quand cette méthode
s'appelle. Nous pouvons aller de l'avant et mieux comprendre le fonctionnement
d'Ajax. Très bien, donc nous sommes sur la
page Millenia, voyez ici un, il n'y a rien dans cette liste
déroulante parce que nous en avons supprimé nos
éléments ASB. Donc les éléments ASP, donc le micro, mais pour les modèles
Il n'y a pas d'articles ASP. Donc, même si nous appelons la base de données en arrière-plan
et que nous chargeons les données initiales, nous ne lui avons pas dit d'
où elle devait aller ses réactifs. Nous avons également supprimé l'
option par défaut de cette liste liée. Nous obtenons donc une liste déroulante
vide. Make, c'est très bien. Maintenant, quand je clique sur Toyota, regardez ce qui
se passe à mon point de rupture. Cela signifie que l'appel Ajax a réussi à trouver
le gestionnaire. Je vais juste
passer à la dernière ligne pour que nous
puissions voir
ce qu'il y a dans les modèles. Vous voyez ici, c'est qu'
il y a en fait le modèle Toyota
qui se trouve dans la base de données. Ce sont toutes les données qui
renvoient tout ce qui se trouve dans la base de données. Nous pourrions donc peaufiner cela
un peu plus parce que nous n'avons vraiment pas besoin de
toutes ces choses. Nous avons vraiment besoin de l'identifiant du
micro et du nom. Très bien, mais c'est très bien. Allons de l'avant
et continuons ou désolés, nous avons juste besoin de la
carte d'identité et du genou. Nous n'avons pas besoin de nous
excuser si je viens de frapper F5 et de l'
autoriser à continuer. Vous verrez maintenant que le
texte par défaut est chargé dans. Un seul inchangé. Il est allé de l'avant et a défini le code HTML. Et puis deux, il
a passé l'appel Ajax, qui a ensuite récupéré ces trucs. Cela signifie
que sous cela, je vais voir supra savoir quand je
parle de journal de console, si vous cliquez avec le bouton droit de la souris sur aller
à Inspecter l'élément ou chauffer si 12 et cliquez sur Console, alors vous
verrez réellement la console. Les messages sont imprimés ici. Il s'agit d'une erreur lors de la tentative de chargement de la police géniale. C'est donc minuscule
à ce stade, ce que vous voyez ici
que la console enregistre les idées du micro. Premièrement, si je change ça par
Nissan, vous voyez que c'est Tool. Si je le change en
Toyota, c'est chacun. Ainsi, chaque fois que nous avons apporté le
changement, nous enregistrons la console, nous pouvons voir quelle valeur
est choisie. En dessous de ça. Vous remarquerez que je suis
beaucoup plus complexe et c' est à quoi ressemble vraiment JSON. Si je développe cela, c'est ce
que nous
appelons un objet JSON. Json est JavaScript
Object Notation, qui est une norme
très, très populaire
pour le transport données sur le Web,
http en ce moment. Dans ce cas, il s'
agissait de prendre toutes les données de la classe et de les
sérialiser en paires clé-valeur. Donc, le nom du champ et la valeur du
champ que nous aurions. C'est pourquoi vous voyez un
nom avec une valeur Meek ID avec la valeur
make, etc. C'est donc le même type de
contrainte que nous venons utiliser ici même lorsque
nous passons l'appel, c'est celle-ci. Touche de remarque ou deux-points de paramètre. Et la valeur juste depuis
que j'utilise une variable, mais dans ce cas est apparue
dans les valeurs littérales. Après avoir reçu cet objet
à partir de l'appel ajax, nous sommes en mesure de savoir simplement accéder
aux valeurs individuelles ou
aux valeurs par leurs clés. C'est un objet et
c'est aussi comme un tableau. Il s'agit d'un tableau de
ces objets JSON. Si j'en avais plusieurs, dites-vous que c'est le cas dans le système. Laissez-moi donc passer en
revue et créer quelques autres modèles. Je viens de créer environ deux
autres Toyota dans le système. Alors regardez ce qui se passe quand
je touche vous a répondu Nissan, mais je change d'
argent à la norme Toyota vu qu'il y a trois
Toyota dans le système. Je n'ai pas fait de pause ou
quoi que ce soit littéralement, je viens de les créer. n'y en a pas dans la base de données. Chaque fois qu'il atteint
le besoin de s'occuper, il va récupérer
les valeurs les plus récentes. Et il y a des objets JSON. Nous voyons donc
chacune des voitures dans sa propre représentation JSON et être représentée
ici dans la liste déroulante. C'est ce que nous appellerons une liste déroulante en
cascade. Les personnes qui ont demandé
cette fonctionnalité ne
savaient pas qu'elles souhaitaient une liste déroulante en
cascade. Ils n'
apprécieraient certainement pas le niveau d' effort nécessaire à la
création d'une telle construction. Cependant, en tant que développeurs, nous recevrons
toujours les exigences et c' est à nous de trouver
la meilleure solution. Donc dans ce cas, jQuery était la
solution la plus simple pour quelque chose qui, comme je l'ai dit, jQuery
ou JavaScript. n'est pas quelque chose que
vous allez toujours
écrire nécessairement, mais cela s'
avère très utile lorsque
certaines situations nécessitent des solutions
rapides et propres. Juste pour nettoyer, je vais simplement
supprimer ces journaux de console parce qu'ils sont vraiment
à des fins de débogage. Vous ne voulez pas
les laisser dans votre code. Parce que lorsque votre application est rendue publique ou que le
castor peut la voir et souhaite obtenir des
informations internes ou potentiellement sensibles
dans son propre navigateur, console se connecte à votre
site Web. Ce n'est pas ce que tu veux. Une fois que vous avez débogué Daniel, corrigé et vous savez, ça fonctionne. Vous pouvez toujours aller de
l'avant et supprimer votre console.logs. C'est vraiment ça. Donc, une autre activité de nettoyage ou quelques activités de nettoyage, commencer par le FID
que je voudrais
vraiment ces valeurs par défaut soient
présentes en tout temps. Donc, ce que je ferais, c'est
également reproduire cela. Et même dans ce cas, vous pourriez le
mettre dans une méthode. Mais ce que je vais faire, c'est
mettre cela en dehors de notre fonction de changement de mixage. Cela signifie donc que
dès le chargement de la page, nous serons toujours
assis sur cette option. C'est une option. L'autre option est
que nous venons de le
remettre au chargement de la page. Nous avons simplement l'option
par défaut qui indique sélectionner le modèle. Mais bien sûr, il n'y a pas d'articles
ASP, donc il est vide. C'est la seule option
qui serait là. Quoi qu'il en soit, lorsque vous changez, cette valeur
sera toujours avant ajouter les valeurs
provenant de la base de données. Non, en dehors de cela, un autre nettoyage que je
souhaiterais se trouve dans les données initiales du
Seigneur. Je n'ai pas besoin d'appeler les mannequins. Si je vais les
charger dynamiquement, je n'
ai pas besoin d'appeler cette requête lorsque la
page est en cours de chargement. Il s'agit donc d'une
requête de liste à l'avance. Et cela va juste
entraîner un temps de plus en plus bas. Nous avons fait tout
cela dans la section Créer. Allons de l'avant et répondons aux mêmes changements dans la mise à jour. Et c'est là que ça
peut devenir un peu compliqué à nouveau. Est-ce que je vais
répéter tout cela ? Donc en ce moment, ce que nous serions enclins à
faire, c'est simplement copier ceci, mettre à jour
et copier ceci, désolé, cette méthode de résultat JSON
et mettre en valeur. Je conviendrais que
cette méthode de résultats JSON
doive peut-être être dupliquée. D'accord, je peux l'accepter. Mais quand nous
reviendrons, nous chercherons la
meilleure façon de
partager le code entre les
mises à jour et la création, sorte que s'il y a besoin
de maintenance, encore une fois, il y en a un ou très
peu points de contact et réduisant ainsi les efforts de maintenance
à long terme.
22. Ajouter des listes de déroulement en cascade avec JQuery - Partie 2: Et nous sommes de retour. Dans cette leçon, ce que nous allons
faire, c'est modifier notre mise à jour pour pouvoir faire
la liste déroulante en cascade. Et ce que nous ne voulons pas
faire, c'est répéter tout ce code entre les deux vues parce qu'on ne fait que bouger un camion. déroulante du
modèle est trop faible liste déroulante du
modèle est trop faible pour être repeuplée chaque fois la
valeur de la liste de sortie du micro est modifiée. Cela se trouve sur la page Créer. Et cela doit également se poursuivre pour la page de mise à jour car c'est à
peu près le même formulaire, la même chose que prévu. Maintenant, la mise à jour du pH a une exigence
supplémentaire lorsque nous voyons que nous avons le micro et que cette valeur
serait déjà fournie lorsque nous sélectionnons une
voiture à mettre à jour ou à modifier, nous choisirions une voiture. Le pH ou ce formulaire
de mise à jour va charger toutes les valeurs
de la voiture. Il va se charger d'
une valeur pour le micro. Mais cette liste déroulante par défaut sera vide. N'oubliez pas que nous sommes en mouvement, les objets devront être chargés
dynamiquement. Et je veux aussi m'
assurer qu'il contient que les modèles. C'est notre parent
quel que soit le micro sélectionné. Donc, s'il s'agissait de Toyota, je ne devrais voir les valeurs Toyota que lorsque
la page d'édition est chargée. Il s'agit donc d'une autre modification que nous allons
devoir nous assurer compte le moment où nous écrivons
notre code pour répondre à ce
script pouvant être partagé. Tout d'abord, il va
falloir le placer dans son propre dossier. Et nous avons discuté que dès les premiers jours où nous avons
parlé de froid, le JavaScript peut être partagé sur plusieurs fichiers ou pages, n'est-ce pas ? Le même concept
s'applique donc ici. Ce que nous allons faire, c'est aller à
notre dub, dub, dub root. Dans notre dossier JS, il
suffit de cliquer avec le bouton droit de la souris. Et je vais le faire, si
j'avais un nouveau fichier JS, il suffit donc d'ajouter un nouvel élément. Et franchement, je choisis
n' importe quoi ici parce que je connais l'
extension de fichier qui est à la fois. Au lieu d'essayer de
trouver exactement celui. Et vous pouvez simplement rechercher ici et vous
pouvez voir JavaScript. Vous obtenez donc un fichier JavaScript. C'est bon. Mais finalement, ce que vous voulez c'est quelque chose avec l'
extension dot js. Nous allons juste appeler ce script de modèles
en cascade. Je plaisante, je suppose. Désolé, laissez-moi obtenir
le script de liste déroulante de mon
modèle en cascade rouge . Je le nomme donc
explicitement parce que je veux qu'il soit très clair ce que
va avoir le fichier de script. Script de liste
déroulante du modèle en cascade. Appuyez sur Entrée, puis il
générera ce fichier pour nous. Cette dernière colonne est vide. Si vous les utilisez
un autre modèle, nettoyez
tout,
modifiez plus loin. Le plus important
est qu'il ait le point JS comme extension de fichier. Sachez que ce que je vais
faire, c'est prendre tout ça, l'
enduire, et ensuite
je vais le
coller dans nos fichiers SIG. C'est donc tout simplement suffisant et ils savent que
nous avons le fichier js. Ce que nous allons faire sur Les pages de création et de mise à jour consistera à remplacer la balise de script
par le composant SRC. Il dit simplement que Script SRC est égal à une intelligence qui vous
aidera à le remplir. Vous contrôlez simplement spécifiquement
ne pas voir d'invite. Liste
déroulante script.js du modèle en cascade oblique. Vous pouvez simplement le copier et vous
assurer de le placer à un endroit similaire sur
la page de mise à jour. Notez que
la plupart des modes, nous
ne faisons pas d'art à Quito pour
l'opération de mise à jour. Nous devons nous assurer
que le formulaire de mise à jour ressemble au formulaire de création. Une partie de cela consiste à s'assurer que les mêmes contrôles sont les mêmes, les contrôles correspondants ont les mêmes valeurs d'ID que celles
affichées sur le formulaire de création. Une mise à jour permet de s'assurer que l'ID du
mix est égal à mix. Et assurez-vous que l'ID du
modèle est égal à celui des modèles. Je viens de faire ces modifications. Et puis
revenons vers le fichier
JS, puis
continuons ou travaillons. Maintenant, quelques points à considérer. Premièrement, oui, lorsque nous créons, c'est très bien parce que
nous l'avons vu fonctionner. Tout commence par
les valeurs par défaut. Et quand on change le mix, attend à
ce qu'il aille de l'avant
et qu'on s'adapte aux nouvelles valeurs. Il connaît le chemin. Nous n'avons donc pas besoin de
modifier le tampon car il existe déjà
dans la page Créer. Les mises à jour peuvent
simplement appeler ce même chemin dans l'ensemble des
demandes de fichiers JSON ou autres. Et ça devrait être très bien. Nous n'avons pas à modifier
ces choses concrètes. Cependant, nous devons considérer que lorsque le formulaire n'est pas vide, comme dans le cas d'une mise à jour, un identifiant de
micro sera présent à l'avance. Avec cet identifiant de marque, nous devons nous assurer de
remplir cette liste à l'avance. Nous avons hâte que
l'événement de modification
lors d'une mise à jour ait
ces valeurs présentes. C'est-à-dire que ce sont deux facteurs. Un autre facteur est que nous
devons nous assurer
que la valeur sélectionnée par l'
utilisateur lors de sa création. Le véhicule est
la valeur présentée. Alors que nous remplissons
toutes les options, comme nous avons peut-être Toyota, nous avons quatre options pour Toyota. Un seul d'entre eux a été
vraiment sélectionné. Nous devons nous assurer
que c'est celui qui leur est visible. Comme nous l'avons vu sur
la page de mise à jour, la liste déroulante affiche
toujours la valeur sélectionnée
lors de la création. Nous devons donc nous assurer de
reproduire ce genre de logique ici avec quelques ajustements. Ce que nous allons faire, c'est prendre
cette déclaration de Meek ID. Je vais le placer au-dessus de
la portée de l'événement. L'événement se produit ici, ne change pas la fonction. Cette fonction est notre événement. Je ne ferai pas d'ID
global pour cet octet. Donc, en faisant cette
déclaration en haut
du fichier sans
accolades, il est propriétaire ou quoi que ce soit parce que notre portée
est vraiment ouverte et fermée mémoires que le dysfonctionnement de l'événement est dans le champ d'application.
change d'événement parce que le crochet s'ouvre ici
et il se ferme ici et tout ce
qui se trouve à l'intérieur est dans son champ d'application. Donc, en mettant cet ancien ensemble de, il n'y a aucune étendue
qui possède cette variable. Chaque fonction et
tous les autres bits de code que nous écrivons
peuvent y accéder à volonté. Donc, c'est très bien. Maintenant que nous l'avons fait,
ce que nous devons faire est
également de répondre à ce problème réutilisable. Il est donc maintenant lié à la confiance de
l'événement de changement. Je ne veux pas qu'il soit appelé
uniquement lorsqu'
il y a un événement de changement. Je voulais être appelé automatiquement lorsqu'
il y a un événement de chargement. De plus, ce que je vais
faire, c'est couper ça. Et sous l'événement de changement, je vais créer
une fonction personnalisée, lire
simplement la fonction Lord. Et nous allons juste l'
appeler Lord Models. Je ne fais que lui donner un nom. Vous pouvez faire ce qu'il
fera pour nous. Et nous
allons juste dire Pâte. Maintenant que c'est dans une méthode, je peux l'appeler aussi bien, donc je peux voir chaque fois que
cela change, je veux charger des modèles
avant de pouvoir charger des modèles, cependant, je dois obtenir
la nouvelle valeur de Meek ID. Donc, nous sommes juste en train de peaufiner ici. N'oubliez pas que cet objet
fait vraiment référence à tout ce qui a
déclenché l'événement. Maintenant, c'est en dehors
des événements, donc ça ne peut pas être ainsi
pendant que nous sommes ici. Je vais donc
copier cette ligne et voir quand cet événement
est déclenché, la valeur de ce contrôle
qui l'a déclenchée, puis tout le
reste peut circuler. Pas de problème. Cependant, quand c'est
global et qu'il est déclaré
manuellement,
dis-moi le contrôle avec le mix d'
ID et obtenez-moi les valeurs. Je les signale donc simplement en fonction de l'endroit où vous faites
les mêmes lignes de code, la façon dont vous y
accédez devrait être différente. Je veux dire, nous aurions pu y
accéder comme
ça à l'intérieur du formulaire présenté, donc cela ne poserait pas de problème. Je vous montre simplement comment réutiliser la syntaxe de différentes
manières. Nous devons donc
y accéder par son nom ici, mais nous avons ensuite des choix
à l'intérieur de notre événement Click. Donc, avec ces
modifications apportées, je ne suis pas Lindsay qui va plus loin. Je vais juste aller tester
et m'assurer que l'
acier crée au fur et à mesure que nous le soulèverons. En testant le Create,
je vais changer la Toyota et je suis toujours voir apparaître les Toyota, celle
de Ferrari. Tout fonctionne donc
dans la section Créer. Donc, avec ces petits ajustements, nous avons la routine et toutes les fonctionnalités qu'il
nous restait la dernière fois. Pas de problème. Ainsi,
créer fonctionne toujours, nettoyé certains de mes dossiers, en particulier ceux avec nos modèles
financés et ainsi de suite. Je viens de nettoyer la base
de données pour y revenir. Donc non, l'objectif
serait que lorsque nous cliquons sur Modifier, Ferrari apparaisse. Mais ce que nous ne
voyons pas nos deux modèles ou le fait que c'était de l'araignée. Souvenez-vous de Ferrari Spider Block. Lorsque nous cliquons sur Modifier, nous voyons RT, nous voyons du noir, mais nous
ne voyons pas d'araignée, nous ne voyons
aucune valeur ici. Nous avons donc besoin que
cela se produise automatiquement. Bien sûr, lorsque je fais l'événement de
changement, cela se produira, mais nous ne voulons pas avoir à attendre le changement de
n pour que cela se produise. Modifions le
code en conséquence. Et ce que nous allons faire, c'est
appeler Lord Models. Au départ. Dès que le script est chargé, nous voulons charger
automatiquement les modèles en un seul, obtenir l'ID Mecca. C'est donc automatiquement lorsque
la page d'édition est chargée, ce script
obtiendra la valeur ici. Ensuite, les modèles de chargement
diraient, allez-y et
respectez la
politique appelée JSON dans l'idée
Michée et obtenez les options. Très bien, alors laissez-moi juste voir si
cela a fait une différence. Nous venons de rafraîchir la page. Et si vous regardez,
laissez-moi me rafraîchir à nouveau, les
construisant correctement. Donc je suis juste rafraîchissant pour
Ari chargé et si vous regardez, vous verrez araignée dans la liste. Existe. De même pour la Toyota, si je clique simplement sur Modifier pendant qu'
il indique sélectionner le modèle, il les a tous dans la liste. Donc, au moins, cette
partie fonctionne. Non, nous devions nous assurer
que nous sélectionnons le bon lors
du chargement de la liste déroulante. Voici un moyen
cool de transmettre la valeur provenant de
notre liaison et du
côté service à
notre script côté client
, puis l'utiliser pour
éclairer notre décision. Dans cette balise de script, nous pouvons transmettre des
paramètres de valeur ici. Je vais dire que l'ID
du module est égal à. Et puis entre
guillemets sortie pour ajouter un signe, modèle point de voiture point ID de modèle de voiture. Juste ici. Je ne fais que
passer notre paramètre lorsque vous appelez ce script, respectez cette valeur disponible. Et c'est ce qu'il
faut appeler. C'est sympa et cool. Ainsi, le signe at, une fois de plus, est utilisé dans le cadre de la
syntaxe Razor chaque fois que vous le voyez, c' est ainsi
que nous pouvons
accéder à C-Sharp. Vous pouvez l'utiliser au signe et si les
déclarations ici sont
lâches, quoi qu'il en soit, nous l'avons vu à plusieurs endroits, mais c'est ainsi que nous pouvons réellement l'utiliser à
notre avantage. Nous voulons toutes les valeurs
et nous les mélangeons avec
la syntaxe
JavaScript standard. Connaître le
fichier JavaScript lui-même. Ce que je peux faire, c'est dire que l'ID de modèle
vd est égal à document est un mot-clé statique qui représente ce
document dans lequel je suis, ou le document, qui
signifie la page. Ce que nous disons toujours
document.ready lorsque nous voulons initialiser notre
JavaScript ou jQuery, plutôt documenter le
script courant et obtenir des attributs. Les attributs
représenteraient donc ce paramètre. Nous l'appelons par son nom. Nous voyons donc cet
attribut et nous stockons n' importe quelle valeur possible avec cet attribut
dans l'ID du modèle. Ensuite, sous l'option, je suis allé introduire
une instruction if qui indique si la valeur point ID. Rappelez-vous donc que
lorsque nous recevons toutes les voitures sous forme de données
ou de l'appel JSON. Cette opération exécute la
requête sur l'ID Meek
, puis elle renvoie la totalité sous la forme de données appelées
sphériques. Ensuite, nous
parcourons les données et voyons me donner chaque paire
clé et valeur. clé serait le nom et
dévalorise ce que nous voulons vraiment. Crée une
variable d'option qui représente une balise d'option HTML avec la valeur d'attribut stockée
dans l'ID de point de la vallée. Et les prises qui présentent le nom qui est venu
avec ce pair de clé de valeur. Ensuite, je vois si l'ID de l'option actuelle
que vous construisez, si l'idée du noyau
invité que vous
évaluez ou d'autres
choses est l'ID du modèle. Ensuite, cette option,
ajoutez une propriété, donnez-lui le nom
sélectionné et choisissez. Donc prop, un ATTR ou un attribut
peut ressembler très semblable. Ils font la même chose, mais je
vous montre simplement différentes façons d' écrire du code similaire. Ici. Je dis juste option cette
propriété, Add Selected true. Ensuite, nous allons de l'avant et l'ajoutons. Avec ces changements apportés. Je vais juste
tout sauvegarder et ensuite nous pourrons revenir à notre
édition et nous allons l'identifier, rafraîchir,
se rafraîchir et les sièges fonctionnent. Je suis retourné à la
liste Toyota Supra. Lorsque je clique sur Modifier, super est automatiquement chargé
même si la liste est pleine, supra est celle
qui est sélectionnée. Si je retourne pour notre araignée, montrez-moi
l'araignée. Il est donc allé Fichte
tous les modèles du JavaScript, puis les a
évalués et ont vu
cela, celui
qui a été sélectionné. Si je fais juste un élément d'inspection, vous voyez sur cette option,
il a la valeur achetée que il a la valeur achetée la propriété a été
définie pour le sélectionner,
donc c' est pourquoi elle a
flotté vers le haut. Très bien, donc c'est essentiellement
tout ce que nous devons faire notre
liste déroulante en cascade fonctionne à la
fois pour la création et
la mise à jour en général, c'est le concept derrière, je suppose qu'on se laisse tomber sur
son chaque fois que vous utilisez un système où vous
sélectionnez une option et que cette option influence le reste du formulaire ou
le reste des options. C'est tout ce qu'ils font. Ils font ça, c'est
regarder pour voir. Avez-vous modifié la valeur
de cette liste déroulante ? Ephèse porte toutes
ces commandes. Ces commandes
peuvent masquer des pièces, masquer des éléments du formulaire. Dans notre cas, nous
réorganisons complètement les éléments d'
une autre partie du formulaire. Quoi que ce soit, vous devez faire. Il est juste ici à
portée de main. Ces choses sont là, canada est difficile à mémoriser et si vous ne l'utilisez pas beaucoup, vous ne l'avez peut-être pas forcément
en feu rapide et rapide. Rappelez-vous chaque fois que vous devez faire quelque chose, mais
la réalité est qu'
une fois que vous avez compris le concept
de JavaScript entier peut vous
aider à rencontrer des pages Web
dynamiques et maintenir, elles peuvent amener
vers réaliser votre idée ou une vision d' une page ou d'un formulaire
ou quoi que ce soit. vous suffit d'y aller
et de faire des recherches sur HomeAway, faire et de
le décomposer en tâches plus petites. Oui, c'était une tâche importante. Penser à tout ce qui est tombé là-dessus va changer les risques. Mais nous pourrions facilement
détailler et dire, d'accord, quels sont les scénarios que
nous devons prendre en compte ? Qui ai-je un cône
pour ce scénario ? Scénario numéro un, les options doivent être disponibles en tout temps. Pour la modification. Et quatre à créer, les deux reposent sur le
même morceau de code. Au lieu d'écrire
ces deux endroits, je la mets simplement dans une méthode et j'
appelle la méthode à deux endroits. Quelque chose change donc un trou de
boulon que nous allons
formuler ou ainsi de suite où vous n'avez qu'à
rencontrer le trou chinois, s'il vous plaît. Ce sont donc des choses que vous avez simplement avec la pratique et l'exposition, cela deviendra naturel
et seconde nature pour vous.
23. Correction des affichages de données: Très bien, nous
approchons de la fin des parties de base de
l'application. Nous avons mis en place un grossier, nous avons fait des trucs
JavaScript sympas. Non, il s'agit simplement d'
embellir l'application. Le premier portable embellissant cette application
serait de fixer les étiquettes. Nous nous
efforçons donc de nous assurer que ces étiquettes figurent correctement
sur la liste des voitures. Mais alors, si nous
regardons des modèles mixtes, les couleurs vont faire ne
montrer que le nom du micro. Et ensuite, si vous regardez
d'autres, vous voyez la date créée
ainsi que sur les couleurs. Je voudrais donc
probablement résoudre ce problème, rendre espacé et
plus lisible par l'homme, ou simplement le supprimer parce que je
ne pense pas que les utilisateurs aient vraiment besoin de savoir à ce stade
quand il a été créé. date de création concerne davantage un audit système que
pour la consommation des utilisateurs. Nous pouvons passer par là et en
cacher quelques-uns. Une autre chose que je
voudrais prioriser serait sur les forums pour
Alice Create Car. Nous voyions que
nous voyions faire modèle de voiture
IID, l'identifiant de l'appelant. N'oubliez pas que
ces valeurs d'ID sont plus importantes pour
ce système que pour l'utilisateur. L'utilisateur va donc
venir ici et se demander ce que cela fait de l'ID, mais ensuite il voit des noms. Au lieu de cela, les étiquettes
devraient voir couleur du modèle de
voiture
douce ou quelque chose comme ça. Au lieu de Meek ID, ce numéro de plaque d'immatriculation, cela devrait être un
peu plus lisible par l'homme. Je pense qu'il serait bon de procéder
à une validation
pour s'assurer que deux véhicules
n'obtiennent pas le
même numéro partagé de licence. Je pense que cela nuit à
la qualité des données. De petites choses comme ça
constitueraient donc l'activité de
nettoyage. Commençons par
nos interfaces pour le modèle et la couleur
créée par l'acte. C'est tout simplement suffisant. Nous pouvons simplement sauter sur ces pages
qui sont ces pages. Donc, pour le modèle, je vais passer à la page d'
index et je vais simplement supprimer la colonne qui
affiche la date de création. Je vais supprimer ces deux colonnes. Aller faire la même chose
pour l'index des couleurs, supprimer créé et le supprimer. Ça. Ça m'a l'air bien jusqu'à présent. À ce moment-là, cette activité
est bonne et tout pour créer
des voitures et mettre à jour ou quatre formulaires pour les voitures où nous
avions un numéro de modèle. Vous voyez ici qu'il est
écrit l'étiquette Lear SP Sir, bord
ESP pour l'identification du modèle de voiture. Très bien, nous avons donc déjà
regardé comment changer le nom complet de
l'index pour lequel il s'agit
d'un nom complet. Et nous avons dit que le nom est
sondeur affiché comme le modèle de mots au lieu de
son nom par défaut, nom. C'est tout simplement suffisant. Tout ce que nous avons à faire,
c'est partout où nous aurions eu cette valeur d'identification. On fait juste savoir qu'
il est censé me voir. Ici, lorsque nous
créons le modèle, nous aurions eu la liste
déroulante de l' ID
du micro, le même principe. Nous lui donnons simplement le nom
d'affichage micro, sorte que la liste déroulante
connaîtra LC MC à la place. Donc, si je saute sur le modèle, je viens de tricher et de
dire que c'est la mise à jour. L'application. Je cours sans débogage. Mais quand je vais sur les modèles et que je clique sur Créer un
nouveau, nous y allons. Il ne s'agit pas de faire
au lieu de Meek ID. Voyons donc que les voitures
n'étaient pas caractérisées,
il a dit l'identification de marque, ID du modèle de
voiture et l'ID couleur. Donc ce que je veux
faire, c'est passer à la classe de voitures et passer par Meek ID, je suis allé voir que votre
nom d'affichage est égal à MC. Pour la couleur, votre
nom d'affichage est égal à la couleur. Pour l'ID du modèle de voiture, votre nom d'affichage est le modèle de voiture. Donc, quand je sauvegarde tout
ça et que je reviendrai, ça va se
rafraîchir automatiquement et vous verrez tout maintenant, il
semble un peu plus
lisible par l'homme . Je vais
lui donner un nom complet. Et ce
nom d'affichage va indiquer numéro
d'espace partagé de l'
espace de licence. Ici. Si je voulais qu'il soit un peu plus sophistiqué qu'une année seulement, j'ai pu voir que votre
nom d'affichage est fabriqué ici. Je vous montre juste
que lorsque vous voyez ces belles interfaces propres, c'est tout
ce qu'elles
font en arrière-plan. Dotnet
vous permet de répondre facilement à
ces changements en arrière-plan et de
le
faire fabriquer ici. Il est tellement plus facile pour vous d'être cohérent à travers votre interface utilisateur avec leurs étiquettes et l'apparence de
tout. C'est donc vraiment tout pour
cette activité particulière. La prochaine activité majeure
pour moi serait de
changer les boutons ou avoir la cohérence
avec nos boutons. Nous avons donc subi cette révision majeure avec des
cartes où nous avons mis en place ces beaux
boutons d'apparence propre pour créer, nouveaux, pour l'édition, pour notre création, ou un dollar à lister
pour la page d'édition, économiser ou un dollar à
lister pour les détails, idiots ou un dollar à lister, nous avons tous ces éléments. Mais ensuite, nous avons introduit
d'autres pages qui nous ramèneront directement
au contenu par défaut. Et si nous
voulions réellement changer, conserver ces looks ou plutôt c'est assez
facile à changer ou qu'ils semblent parce que nous l'avons fait. Nous voyons
comment ils ressemblent. Mais ce que nous devons
faire, c'est de nous
assurer qu'ils sont
tous cohérents. La cohérence est essentielle. En conception Web. Vous voulez vous assurer que toutes vos pages ont ce thème
commun derrière elles. Ce que nous allons faire,
c'est regarder tout le week-end ces boutons et mettre dans des forums
plus réutilisables. Parce que si j'avais ce que j'
ai fait , il y a 1234 endroits différents
avec le bouton Créer. J'ai donc un bouton Créer
sur la liste des voitures, un bouton pour figurer sur la liste des modèles et des couleurs
mixtes. Mais si je voulais
changer le design
général un signe plus à quelque chose d'autre ou quelque chose
ou sur le bouton, j'aurais quatre
endroits différents pour faire face à ce changement. Quand nous reviendrons,
nous examinerons comment nous
pouvons faire un peu d'abstrait qui est Alt et utiliser le
tempéré gagné sur toutes les pages.
24. Nettoyer l'interface utilisateur: La dernière fois que nous étions
ici, nous avons traité nos étiquettes nulle part pour nettoyer les
quatre boutons et
la disposition générale
de tous nos pH, des listes et de la façon dont
tout s'écoule. Nous parlons
d'avoir un modèle général pour les sections de
trous ou de boutons. Regardez. Dans cette leçon, nous allons
examiner ce que nous avons des partiels. Partiel est exactement ce que
le nom suggère. C'est comme une partie d'une page. Nous utilisons déjà
des partiels car nos vues, ces PFAS de vues sont techniquement
partielles car ce
n'est qu'une partie de tout ce qui est
nécessaire pour une page HTML. Et ce que nous
faisons,
c'est juste au hasard ou non au
hasard, désolé, les rendre
dynamiquement à l'intérieur de la section particulière
du pH global que nous voulons. C'est donc notre page principale
et c'est ici que nous définissons tous les styles globaux
et tout va bien. Mais ensuite, nous
rendons les partiels fonction de l'endroit où nous
naviguons, nous montrons la partielle pour que
cela ressemble au changement. Les pages sont en train changer alors que
nous ne faisons que modifier la section
à l'intérieur du corps de rendu. Maintenant, nous pouvons apporter
que les concepts n'ont pas un peu plus à la page actuelle. Et c'est ce que nous
allons faire pour obtenir les boutons d'index. En ce moment, j'ai étudié
complètement les boutons d'
index pour
la page d'index des voitures. Il est assez facile de simplement copier. Passez sur les modèles de voitures, allez à l'index et il
a remplacé les boutons ici. C'est assez facile.
Encore une fois, il est assez facile de le
faire pour toutes les autres pages. Parce que les
boutons doivent vraiment se ressembler et notre routage est assez cohérent, sauf
le fait que nous utilisons l'échafaudage par défaut
ici pour l'édition modèles de voitures et de tout sinon, où changer cela à mettre à jour pour le
montage pour les chariots. Je vais vraiment défaire ça. C'était juste faire comprendre que vous
pouviez les changer. Renommer un fichier
est assez simple. Je dois dire que c'est
renommé le fichier supérieur, le fichier de code sera
également renommé. Mais une autre
conséquence de cela est que j'aime
rester cohérent avec le nom du
modèle quelque part pour
changer cela du modèle opiacé pour modifier modèle et utiliser le
point de contrôle et est-ce que j'ai renommé refactor
à travers et à travers. Et puis n'importe quel
chemin qui aurait conduit à mettre à jour ce HTML CSS
doit mener à la tête. Il l'aurait fait par défaut. Je disais simplement que pour dire que si nous
voulons être cohérents, nous devons être cohérents. On ne peut pas en nommer un, c'est l'Inde , la
Chine, et l'autre
est le changement, etc. Il est plus difficile pour vous d' être cohérent
avec votre code. Nous allons
changer les boutons
de tous les index. Mais encore une fois, je ne veux pas
copier et coller le code. Ce que nous allons faire,
c'est dans le dossier partagé. L'objectif partagé
de Shear est que les différents partiels soient accessibles dans toute
l'application. Dans le dossier partagé. Nous allons juste
aller de l'avant et ajouter, je vais dire un nouvel article. Et de l'écoute
choisirait la vue rasoir. Si vous examinez la
différence entre les tableaux d'arbres B de vue, l'extension est la même dans la description
indiquant qu'
une page est livrée avec un modèle de page. Ce que nous avons
utilisé pour connaître l'IRI. Donc, des pages où nous arrivons au HTML
CSS et au HTML CSS. Cependant, l'augmentation de la vue
ne va venir qu'avec le HTML
CSS et c'est très bien. Ce que je vais appeler
cette partielle, ce sont des partiels d'
index de soulignement ,
désolé, des boutons d'index. Lorsque la convention de nommage
mène avec le trait de soulignement. La cohérence est essentielle. Boutons d'index de soulignement. Et c'est juste pour être très clair, il s'agit d'une obligation d'indice
partielle, d'un z partiel de deux équipes, du premier trait de soulignement et des finalités
financières
du mot partiel. Nous pouvons donc y aller de l'avant et ajouter cela. Lorsque nous avons ce point de vue, nous devons spécifier un modèle. Le modèle représente essentiellement toute donnée ou type de données qui
régira le type de données accessible sur cette partie. Dans notre facilité
d'utilisation régulière aurait eu un modèle chez San. Et vous verrez
qu'ils utilisent des types de classes complexes. C'est pourquoi nous pouvons faire des
choses merveilleuses accédant aux données et en les
manipulant. Cependant, tout ce que nous voulons sur le
pH, ce sont les boutons d'index. Et tous les
boutons d'index vraiment nécessaires qui seraient considérés comme des données dynamiques, seraient la
valeur d'id que chaque page aurait besoin de
générer pour chaque élément. Donc, tout ce que je vais faire,
c'est dire le modèle. Et je fais un entier
parce que nous attendons une valeur entière
comme valeur d'id. Les boutons ou le
code que je vais utiliser
pour les boutons
viendront de la voiture car ce
sont les boutons que nous avons déjà bien conçus. Je vais juste aller
ici, les copier. Et je voyais que tout
doit être cohérent. Nous avons donc modifié la modification, la
mise à jour pour modifier le lien, et nous nous sommes assurés de changer également
le nom de la page afin
qu'il ne soit plus mis à jour, n'est pas une modification que
nous partageons la même chose. fichiers basiques ou noms de fichiers à
peu près tous les niveaux. Quelqu'un pour copier ça, mettez-le au lieu
du partiel. Ensuite, vous allez commencer
à voir lignes
rouges apparaissant là où item.name DID était parce que
je voyais bien, je ne vois aucun élément ni aucune variable ou objet sur
l'élément nommé Pease. Je ne sais pas quoi, mais
rappelez-vous que notre modèle est l'entier qui
représente essentiellement l'ID delta de l'élément. Donc je peux simplement dire au modèle de signe, parce que le modèle
va juste être un entier. Cela
vous montre que chaque fois que vous avez besoin de données sur votre
page ou d'une partie, vous suffit de défendre un modèle et d'utiliser vos
types de données à votre avantage. Modèle et modèle. Modifiez les détails, supprimez. Tous ces éléments sont sur notre partielle sur la page
que nous voudrions. Et je suis d'abord allé
le tester sur le discours de la voiture, où nous voulons
inclure la partielle, vous devez dire au panneau
parce que nous devons lire un peu C-sharp et nous allons
attendre un assistant HTML. Et nous avons un évier partiel. Donc, chaque fois que nous utilisons un asynchrone, nous devons précéder
d'un poids. Ensuite, cette méthode prend deux paramètres ou elle a
plusieurs surcharges que nous utilisons sur la surcharge qui
va enlever
le nom de la partielle,
qui est partielle des boutons d'index. Ensuite, nous allons
également lui donner le modèle. Le modèle est générique.
E peut être n'importe quoi. Il ne s'agit pas de supposer que le modèle doit
être quelque chose. Je vous dis quelle est la
valeur que je veux transmettre. Et il comprendra
quand il arrivera à la partielle réelle que la valeur fournie est le
type de modèle auquel il s'attend. Si j'ai dit Interior et
que j'ai fourni une chaîne, elle ne se chargera pas si je dis type de valeur de données
Juan et qu'ils
fournissent une autre valeur de données. Donc, si je veux, si je dis que le
mode est le type de données, mais fournissez une valeur d'
un type de données différent. Cela ne fonctionnera pas. C'est juste vous dire que c'est très générique mais
assez strict pour savoir que ce que vous m'avez donné n'est pas ce à quoi
je m'attendais. Nous avons apporté cette modification
à la vitesse de la voiture. Si je contrôle F5 et que je le regarde, je reçois 500 erreurs, donc je reçois une
exception non invitée et, vous savez, je n'hésite
pas aux flèches. Je veux que nous voyions
quelle est l'erreur. Dans cette situation, nous
avons un aperçu de l' endroit où il va chercher
un int, une partie. Ce sont donc des
endroits légaux que vous pouvez mettre une partielle telle que lorsque vous voyez que c'est
le nom partiel, il le cherchera
dans ces endroits. Il regarde dans les pages barre oblique les voitures barre oblique le bouton d'index
partiel. Non, ce n'est pas le cas. pages barre oblique des arêtes de thérapie barre oblique partagée y sont obliques et les vues barre oblique
partagée affichent le nom. Nous savons avec certitude que
nous le mettons dans des
pages , index partagé, partiel. Mais ensuite j'ai dit le bouton In
partiel dans le code, quand j'appelle les boutons, c'est mon
erreur d'orthographe juste là. Il suffit d'aller de l'avant et de le modifier, de
sauvegarder, puis de
revenir et de rafraîchir. Et je ne vois nulle part
deux jeux de boutons. Donc, notre code fonctionne
ou partiel fonctionne. Maintenant,
prouvons encore plus que
la partie fonctionnera. Donc, pour les modèles mixtes
et les couleurs, je vais prendre cette
ligne de code, une seule ligne de code. Je vais juste
le mettre sur tous les autres index. Donc, si c'est déjà sur les voitures, laissez-moi le mettre sur l'index
Pour quatre modèles, un peu de bois pour le mettre sur
l'index, quatre couleurs. Je vais
le mettre sur l'indice pour moi. Ensuite, lorsque j'enregistre et que je contrôle, rafraîchis chacun d'entre eux, vous commencerez à
voir ces liens apparaître. Tout ce qui n'est pas rafraîchissant, c'est parce que je n'ai pas sauvé. Laissez-moi y retourner. Voir les boutons nodaux ici, les boutons
nodaux ici. Vous voyez donc avec très
peu d'efforts, nous avons cisaillé ces boutons. Permettez-moi de voir s'ils fonctionnent toujours. Si je clique sur Modifier, il
accède à la page de modification. Si je clique sur Détails, il navigue dans les détails. Donc, il le fera pour tous, car une fois
de plus, la cohérence est essentielle
à la navigation. Les propriétés sont les
mêmes partout. Ils recherchent tous l'ADA, la même construction ou les mêmes valeurs. Mais par rapport au mécanisme de
routage interne
au dossier pour un modèle de voiture et pour les voitures et pour chacune
des autres. Il sait où aller
quand on clique dessus. Mais c'est un code de base. Ce que je peux maintenant faire, c'est
supprimer ceux par défaut. Je vais juste passer en revue
chacun des index et vous allez voir un tas
de plus propres, nous réduisons trois
lignes de code répété. Et dans le cas des
cartes, encore plus de voies. Et je vais simplement supprimer
cette ligne commentée. Et c'est beaucoup mieux. Sachez que tout le monde est sur la
même longueur d'onde avec les boutons. Sachez plus tôt, je vous aurais dit, vous encourage lorsque nous
faisons l'autre outil grossier, essayez de répliquer toute la fonctionnalité de
suppression et le bouton de suppression
en cliquant sur le formulaire et tout.
sur toutes les autres pages. Sachez que si nous voulions partager ce code
sur les pages, que devrions-nous faire ? Eh bien, nous ne pouvons pas vraiment
partager le formulaire. Je ne recommanderais pas
d'essayer de cisailler le formulaire. Et nous ne pouvons certainement pas
partager le gestionnaire, mais nous pouvons partager le script. Je vais donc
créer un nouveau fichier JS. Nouveaux objets, désolé, et
recherchez JavaScript. Et ce nouveau
fichier JavaScript va être un script de bouton de suppression d'
index. Ensuite, nous pourrons mettre le, laissez-moi
revenir au code ici. Toute cette fonction,
je vais juste couper ça, placer à l'intérieur du script de bouton de suppression de l'
index. À ce stade, nous avons
en fait
quelques occasions qui s'offrent à nous parce que je n'ai pas
dit que nous partagions un formulaire, mais permettez-moi d'évaluer, permettez-moi de fermer
tout ce qui
n'est pas nécessairement
nécessaire. point. Dans le formulaire, je suis très précis lorsque je dis que
le nom est une carte d'identité de voiture. Il ne s'agit pas nécessairement d'une carte d'identité. J'aurais pu facilement
appeler ça l'identifiant d'enregistrement. L'idée d'enregistrement à ce stade est un
nom bien plus générique que la simple voiture. Au lieu de regarder vers l'avenir, seule la voiture IBM a
cherché un identifiant d'enregistrement. Et je vais dire que
Sit the record ID est égal
à tous les identifiants de
données sur le bouton. N'oubliez pas que
tout le monde utilise le même modèle de bouton. Une fois qu'ils auront cliqué sur le bouton, il aura cet identifiant. Nous pouvons utiliser le même formulaire, nous
asseoir un week-end, simplement envoyer ce formulaire de suppression. Je peux maintenant en créer
une autre partielle. Vous voyez, alors laissez-moi, avant
de créer cette partielle, laissez-moi voir que SRC est égal au
bouton d'index oblique G Supprimer le point js. m'assure juste de l'avoir. Ce formulaire peut en fait entrer en partie parce que je le
mets en partie parce que je ne veux pas
copier ce formulaire sur toutes les pages et si quelque chose
change avec le formulaire, nous devons tout faire. encore une fois. Il est donc préférable de le mettre dans un partiel et lourd à un
endroit cette année et j'
ai eu une autre vue sur le rasoir. Alors allez ajouter une nouvelle vue rasoir. Dès que je le vois. On y va. Et sur la partition,
supprimez le formulaire ou l'index, supprimez la forme, partielle, somme, nommant suffisamment bien pour que je puisse voir le nom
plus tard et le chiffre, oh oui, c'est à ça qu'il était destiné. Cette partie n'a pas besoin
de prendre un jeu de données. Je n'ai même pas besoin
de lui donner un modèle. Ce formulaire
de suppression
est toujours à la recherche d'un gestionnaire
sur la page sur laquelle il se trouve
appelé delete transmet
un enregistrement nommé nommé. Appelez-le un ID d'enregistrement ou une
variable nommée Record ID. C'est tout ce qui est partiel, c'est quatre. Sur la page d'index, j'ai un autre moyen
d'inclure les partiels, ce qui est beaucoup plus simple
où je dis simplement que nom
partiel est égal à et le nom de la
partielle à portée de main. Au lieu de le saisir, d'autres
analyses pour détecter l'erreur. J'ai juste cliqué dessus,
appuyez sur F2 pour renommer, copiez le nom et collez que cela
fonctionne plus intelligemment, pas plus dur. Ensuite, je peux prendre ce bloc. Et pendant que c'est sur
la page d'index des voitures, je peux le mettre sur toutes les
autres pages d'index. Facilité d'utilisation du trimestre. Maintenant, l'avant-bras est
là et le script regarde le
bouton Supprimer depuis nos boutons. Je peux donc simplement aller de l'avant et le
mettre sur chaque page d'index. Très bien. Nous sommes près
de là. Une fois de plus, nous faisons la promotion code, de la réutilisabilité
et du modèle. Nous voulons déployer tous
ces efforts dès le départ. Vous pouvez prendre beaucoup de temps à le savoir, mais à long terme, c'
est pour une bonne cause. Sachez que nous avons
le Delete Forum et que tout le monde
voit l'ID d'enregistrement. Laissez-moi passer au code
derrière pour les voitures, puisque c'est là que tout
a commencé, puis nous sommes allés au contrôle et le moteur fait tout
effondrer. Et puis nous avons notre
suppression en pause en prenant les identifiants de voiture. Au lieu de cela, je suis allé voir
un identifiant d'enregistrement parce que rappelez-vous que c'est ce à quoi le
nom va se lier. Je prends juste l'ID d'
enregistrement et je vais simplement renommer le refacteur
tout au long de la méthode. Et celle-ci est à
la recherche de la voiture, puis elle va essayer de la retirer et de la
rediriger vers la renommée du pH. Je peux prendre cette méthode et
cette méthode ES, nous avons adoré. Vous répétez cette méthode
jusqu'au bout. Nous pourrions théoriquement
créer une page
de résultats contenant toutes ces
méthodes génériques et les rappeler. Donc, comme même avec les voitures
pour obtenir le résultat JSON, au lieu de devoir le
répéter lors de la création et de la mise à jour, je pourrais le mettre dans
un gestionnaire générique que nous nous assurons simplement d'appeler
ce chemin de partout. Mais c'est très bien. Vous savez, même si cela semble être une bonne idée
et que cela semble logique, peut
y avoir des limites quant à que vous voulez faire tout ce que vous êtes
utilisable en ingénierie. Et parfois, votre contexte
déterminera si vous
devez aller aussi loin. Dans ce contexte, je ne vais pas aller aussi loin
avec cette méthode particulière. Au lieu de cela, je vais
laisser chaque page d'index conserver sa propre implémentation
des suppressions car différentes pages ou enregistrements peuvent avoir exigences
différentes
pour notre suppression, n'est-ce pas ? Ainsi, comme par exemple, les
modèles, si je devais
supprimer un modèle, je
devrais probablement éliter toutes les cartes liées
au modèle avant de pouvoir les
supprimer. La logique à l'intérieur
peut être légèrement différente. Dans cette situation, la
suppression doit examiner les modèles de voitures et
supprimer les modèles de voitures. Donc, tout ce qui est en voiture, je vais simplement renommer le modèle de voiture. C'est la mise en œuvre. Cette suppression est présente sur la page des modèles de voitures partout où
elle se trouve déjà sur les voitures. Donc, dans les couleurs, c'est le même principe, suffit d'ajouter cela et l'ID d'
enregistrement reste le même. Je renomme ça en couleur. Et nous regardons
dans la table des couleurs à travers et à travers. Et ensuite, nous faisons la même chose. Mais en aucun cas pour moi, où nous avons changé la table
pour mélanger tout ce qui disait couleur ou autre chose
que vous
avez pu copier et
coller tout ce temps. Les nez se mélangent, sachez que chaque page d'index sait qu'elle a la méthode de suppression à la
recherche d'un ID d'enregistrement. L'ID d'enregistrement provient du formulaire que nous venons de
mettre en partie. Chacun d'entre eux
chercherait donc ce formulaire de suppression et l'ID d'
enregistrement assis à la valeur. Et encore une fois, le script n'est pas cisaillé. Laissez-moi donc
tester ça. Nous sélectionnons toujours un micro pour les deux. La liste n'est pas peuplée,
c'est suspect. Allons de l'avant
et inspectons l'élément, regardons la console
et nous voyons que cet ERCP ne peut pas lire la propriété, obtenir l'attribut de l'âme nulle. Je crois que cette erreur
est liée au fait que nous transmettons,
dans notre cas, nous obtenons l'ID du modèle quel que
soit cet attribut lorsqu'il
est transmis
dans la page de mise à jour. Bien sûr, pour
l'ATPase,
nous transmettons plutôt ces attributs, mais nous ne l'avons pas fait
sur la page Créer. Ce que j'ai fait, c'est d'
introduire cet attribut dans ce script sur Create pH où je transmets l'
ID du modèle est égal à 0. Cela n'a que très
peu de conséquences étant donné qu'au
moment où nous en créons une, aucune donnée n'est présentée. C'est pourquoi je
ne peux pas utiliser l'ID de modèle de voiture car car la
voiture est vide, ce n'est pas le cas. On se retrouverait donc avec la
même exception de connaissances juste en dessous du côté C pointu. Au lieu de cela, je lui donne
juste une valeur par défaut de 0 parce que nous n'en avons
vraiment pas besoin. Aucune extension ne va à, ou une extension des exigences
de modification
est transférée à notre script. Si nous revenons au script, évaluons
exactement ce qui se passe. Lorsque le script est chargé
pour la première fois, il reçoit les
soins médicaux présentés. Il charge des modèles, puis
obtient l'attribut, puis exécute le JSON. Mais regardez ça.
Chaque fois que nous allons modifier le mixage, nous
appellerons des modèles de charge, ce qui va ensuite
essayer de récupérer les attributs,
puis de faire la même chose. Nous n'avons vraiment pas besoin de
cet attribut plus d'une fois. Il ne fallait vraiment que la
première fois que le pH soit chargé. Parce qu'après cela, nous ne nous soucions pas vraiment de ce qui
aurait pu être sélectionné. Ce que je devrais faire, c'est attraper cela et mettre ce
script global est en cours d'exécution, obtenir le micro, obtenir l'
ID du modèle, puis Lord models. Ensuite, c'est ce qu'il fait. Lorsque les mixages ont changé,
nous pouvons faire de l'IID. Nous réinitialisons les modèles HTML
et nous chargeons les modèles, ce qui fait le Fitch. Cela n'
a vraiment besoin que d'une seule fois. C'est donc un autre reflux
que vous
voudrez probablement considérer car je crois que cette erreur
aurait brisé la feuille de style
en cascade de porte à chaque fois que la valeur est modifiée. Si vous repérez celui-ci avant moi, alors félicitations signifie que vous avez fait
plus de tests que moi. Ces changements ont été apportés,
revenons à notre application Web et essayons ou créons à nouveau
pour la voiture. Et puis je fais Toyota, et puis je vois, Ok, Nissan et Ferrari Hokey sont en cascade
, c'est Buck. Laissez-moi passer au montage
et assurez-vous que les liaisons pires si je change la nuisance et que ça
arrive pour notre colonne vertébrale. Bien. Nous sommes en train
de tester le bloc Toyota Corolla
brut. Celui-ci est un nombre
inférieur à celui de 2001, et je viens d'en ajouter
trois autres pour accélérer le processus d'
ajout d'outils. Je vais tester la suppression. Nous voulions donc nous assurer
que la fonctionnalité de suppression fonctionne
toujours sur la vitesse de notre voiture. Donc, supprimez, nous recevons l'alerte de nos
suites, c'est bien. Si je clique sur OK, il est supprimé. Cela fonctionne pour nous. C'est bien. Maintenant, si je vais aux autres pages, je vais créer un test ici parce que je
dirige les autres. Donc ça crée encore
marche, c'est bien. La suppression fonctionne-t-elle
ou regarde-t-elle cela ? La même
alerte de suite s'affiche. Et si je clique sur OK, il appelle la batterie de suppression et redirige parfaitement vers la page
et tout. Maintenant, nous voyons comment nous pouvons mettre en place. Bien sûr, nous allons coder
quelqu'un pour supprimer le plus haut de la
liste des modules qui fonctionne. Ensuite, je suis allé
créer une nouvelle couleur. Nous avons toujours créé l'acte, donc c'est une autre activité de
nettoyage que j'aurais
négligée où nous devions
supprimer le champ de saisie pour l'
acte créé sur certains d'entre eux. Mais nous avons le test
et la suppression fonctionne. Juste comme ça. Nous aurions mis
en place des partiels pour nous assurer que les
boutons semblent cohérents. Ce même concept
peut donc être étendu au bouton Créer un livre ou Créer ici
avec un signe plus. Bien que cela semble propre, mais que se passe-t-il si nous voulions
qu'ils aient tous la même apparence ? Donc, au lieu de le créer ou
n'importe quel ennemi dans ce style pour le bouton
Créer
n'est pas le plus de code, mais encore une fois, c'est
une question de trou. Vous souhaitez restructurer votre application
autant que possible. Dans cette situation, vous n'avez probablement probablement
que la
clé de repas et le contenu en copiant et en collant le bouton Créer, peut-être
d'idées différentes pour
les différents mélanges cris
sur les différentes pages. Mais en fin de compte, j'essaierais probablement de le mettre dans
quelque chose qui est réutilisable, autant plus que celui-ci
n'a pas besoin de données. Il s'agit simplement d'un bouton ou
d'une étiquette d'ancrage
qui a le top kill Partisi
ASP, la hauteur de tiret. suis séparé et j'ai fait
le montage moi-même. Je ne voulais pas vous guider à travers chacun d'eux
parce que, comme je l'ai dit, tout est
granuleusement avec le modèle et les
boutons et la capacité de partage. C'est à vous de décider de votre
tolérance à l'égard d'une telle activité. Je suis allé de l'avant et je l'ai
fait et je vais vous
guider au cas où
ce serait
vraiment quelque chose que vous aimeriez
vraiment faire. Peu importe. Je vais juste
fermer tous les onglets et nous pouvons simplement parcourir le site partagé, en créer
d'autres. Nous avons donc fait celui-ci ensemble, les boutons d'
index partiels, nous savons ce que nous savons
et comprenons que nous
transmettons les données sous forme d'entier et
que nous pouvons accéder à ces données via
un module de mots clés. Maintenant, pour le bouton Créer
partiel, il restera la balise p avec le bouton
Créer. Et cela vient
de celui que nous avons fait ensemble pour les voitures. Et puis sur chaque page, je viens de faire l'autre façon
de référencer le partiel, ce qui signifie que le
nom partiel est égal à cela. Donc, étant donné qu'aucune donnée
n' est nécessaire pour
le bouton Créer, je n'ai pas à mettre de
modèle ou quoi que ce soit de ce genre. Vous pouvez également inclure
des partiels comme celui-ci. Ils sont comme du HTML statique. Et d'une manière
générale, quand ils ont
besoin de données, il faut le
faire comme ça. Très bien ? Donc ce HTML statique à l'
aspect Target, je viens de mettre ça dans
les modèles de voitures. Je l'ai mis dans l'indice des voitures
partout où j'en avais besoin. Je l'ai juste mis là où
ils ont créé. Qu'est-ce que je viens de mettre le partiel. Une fois que je reçois si je
voulais changer le design, je vais changer le design un endroit et partout
est affecté. C'est le Create One. Je l'ai fait pour les détails et tous les
boutons de détails auraient eu cette div avec la
balise d'ancrage pour aller sur la page d'édition. Et il aurait pris l'
ID de l'itinéraire sous la forme de l'ID d'enregistrement. Ensuite, nous ajoutons l'
argent à la liste. C'est pourquoi celui-ci nécessitait
un modèle sur n'importe quelle page de détails
qui a été utilisée en partie ? J'aurais dû attendre. asynchrone partielle a appelé le bouton de
détail partiel, puis je
transmets simplement l'ID si nécessaire. Une autre partie du nettoyage
était que j'ai supprimé les champs de date de création
des forums de création
et de l'index, etc. C'était donc une autre
partie du nettoyage que j'ai fait hors caméra. Mais encore une fois, soyez
libre d'être créatif. N'hésitez pas à faire preuve de créativité
car c'est votre application, vous le savez le mieux, et vos clients sont la voix
que vous devez suivre. Alors faites ce que vous pensez juste et vous pouvez
faire des nettoyages, ou apporter des modifications
à votre interface que je ne pense pas faire à la mienne. L'autre aurait donc
été les boutons Modifier, qui sont simples,
strictement HTML. Il s'agirait des boutons Modifier
à la fin du formulaire, celui à enregistrer, revenir à
la liste. Donc, sur n'importe quel formulaire de modification, je verrais juste des boutons d'
édition partiels, partiels. Il suffit de mettre ça et de
rappeler que le groupe de
formulaires je
viens de faire toute la div, les boutons et de mettre
à l'intérieur de cette partie. Vous pouvez donc simplement entrer dans
cette partie de n'importe quel formulaire de modification. Tous les formulaires de modification
peuvent être partiels. Encore une fois, la cohérence. Nous avons déjà examiné les modifications. Nous avons index, supprimer
et c'est tout. Ce sont tous les
partiels que j'ai. Ce sont tous les
modes que j'ai créés. Et franchement, l'
interface utilisateur se présente de la même manière. Un utilisateur ne saurait jamais que nous avons fait tout
cela en arrière-plan. Tout est rendu
et fonctionne comme prévu. Il y a des boutons sur la page de détails et notre suppression fonctionne comme
nous le savons, cela devrait le faire. Très bien. Je viens de remarquer sur la page des détails des voitures que ça va bien. Donc, certains DTA ou ne reviennent pas. Alors, résolvons ça
pendant que nous sommes ici. C'est pourquoi nous sommes ici après. Très bien, revenons donc aux détails
de notre carte, à l'école derrière et je pense que cela est lié au
fait que nous n'
incluons pas assez de données
sur notre requête ici. Je vais juste
sauter pour indexer et emprunter le code
qui inclut. Au lieu de l'écrire librement
à partir de zéro. Et je vais juste
le placer ici. Et on y va. Nous faisons donc nos voitures,
incluons tout, puis nous obtenons la première ou par défaut par pièce d'identité. Et sauvegardez ça. Retournez en arrière et rafraîchissez-vous et sachez que les détails
montrent une bonne chose. Il suffit de cliquer
et de regarder les boutons. Et bien, celui-là
est apparu, non ? Donc, si nous allons sur n'importe quelle page, nous verrons le
même type de dynamique. Les boutons sont là, tous de la même façon. Et cela a pris, je n'ai pas
nettoyé celui-là. Pas de problème. C'est
pourquoi nous sommes ici. Laissez-moi donc sauter aux couleurs. Décollez la date de création. Très bien. Je pense que c'est tout
pour cette activité. En fait, vous pouvez
probablement essayer si vous êtes intéressé par les boutons de
création parce que vous voyez qu'ils
créent des boutons ici, ne semblez pas que nous
voudrions qu'ils regardent
là, c'est sur les voitures. Je n'ai pas fait les
boutons de création pour les autres. Donc, si vous achetez tous
les boutons partiels et que vous
avez tout réutilisable, n'hésitez pas à essayer
celui-ci par vous-même. Très bien les gars, donc nulle part à la fin d'un autre jalon, nous avons mis des tables
supplémentaires. Et c'est
une application merveilleuse. Nous avons examiné plus
JavaScript et jQuery. Nous avons regardé comment faire de l'hôtel une cause
avancée. Ce côté serveur et côté
client
se parlent entre eux pendant
l'exécution de l'application qui se
manifeste sous la forme d'une liste déroulante en
cascade. Nous avons examiné
comment partager des modèles sur plusieurs pages à
l'aide de partiels. Il y a beaucoup plus à faire et
il y a beaucoup plus à apprendre. Mais les pas de bébé et la pratique sont ce que nous y
arriverons en vert. Donc, à ce stade, ce que
nous allons
faire dans notre référentiel
GitHub, Oliver modifie toutes
nos migrations et
entités ainsi que toutes les
modifications que
nous avons apportées la
base de données ou aux scripts. Tout ne sera
pas ajouté à notre référentiel. Nous venons de mettre un joli message qui nous donne au moins un résumé
de ce que sont les changements. Et puis on va tout
commettre et couler. Une fois cela terminé, nous pourrons passer
au module suivant.
25. Configurer des référentiels d'accès des données: Très bien, les gars, bienvenue. Nous voulons donc maintenant évaluer où nous en
sommes dans le projet. Nous avons mis en place certaines fonctionnalités
à mettre en place, c'est très bien. Mais pour l'instant, nous devons assurer que nous
allons
mettre en place certains concepts
fondamentaux afin que lorsque nous étendons
notre application, nous ne fassions pas autant de mal que nous avons le potentiel de nous ne trouvons pas les
fondations correctes. Je veux maintenant me concentrer sur notre utilisation du B2B is contextes
directement dans nos pages ? Non, oui, ça marche. Et il a été conçu
par Microsoft, par l'équipe Entity Framework
Core pour permettre injection
directe du
contexte dans la page. Et ce serait dans ce que
nous appelons Sculpt Monitor, signifie pour
toute la durée de vie d'une requête, pendant toute la durée
de vie de ce code exécuté sur obtenir votre instance de
contexte unique. Très bien, donc chaque
fois qu'il arrive sur cette page, vous obtenez une nouvelle instance
et elle peut faire son travail, puis elle disparaît. Artistes automatiques, il
ouvre une connexion, fait le travail et
ferme la connexion. N'oubliez pas que les
coûts de base de données coûtent cher Ils voulaient
donc
s'assurer que vous êtes aussi
efficace que possible par rapport à une base de données
appelée. Et oui, ils en ont fait
un travail merveilleux. Le problème, c'
est que parfois vous réaliseriez que vous
commencez à répéter des requêtes. Ainsi, par exemple, lorsque nous devons faire cela,
laissez-le tomber sur celui-ci, nous devons plutôt obtenir des modèles
et des couleurs de voitures mixtes. Si nous devons obtenir des micros sur plus d'une page, il est difficile de
répéter cette ligne de code. Donc oui, la répétition va se produire. Mais encore une fois, quelle est votre tolérance au risque ou que vous
possédez cette répétition ? Parce que nous devons insérer cette liste de
sélection à l'intérieur de la, elle pour les voitures. Nous devons également le
faire pour les modèles de voitures. Et nous recevons les modèles, que nous
créions notre édition, nous devons aller et moi
le même appel de requête. Quelque chose peut changer. Et si on avait un mélange ? Nous avions certains d'entre eux
que nous ne sommes pas trop actifs ou certains
critères dans nos propres critères, lesquels nous voulons. Vous pourriez alors courir le risque
de devoir le maintenir. Si quelque chose change
en fonction de la façon
dont vous obtenez le mix à
partir de la base de données, vous devrez rencontrer
plus d'un pouce clé
dans plusieurs pouces . Et si vous oubliez
une de ces choses, alors vous risquez
de ne pas rester dans l'application aussi facilement qu'il
aurait pu être maintenu. Il y a un certain nombre de choses que je comprends,
c' est
vraiment la
raison pour laquelle les gens construisent ce qu'ils appellent un rappeur
ou un référentiel autour des opérations de base de données
que vous pouvez avoir 1 de référence pour
opérations générales. Et vous pouvez en avoir
des spécifiques par table. Mais il s'agit encore d'un
entretien, d'un contact. Il est donc plus facile à
entretenir à long terme. Donc, pour démarrer cette activité, pour configurer un référentiel,
c'est ce que nous allons faire dans notre solution, c'est ajouter un autre fichier sur d'
autres projets ou autres, et ce
sera une bibliothèque de classes. J'ai le mien sur mes
modèles récents où vous pouvez toujours rechercher des modèles et nous voulons
une bibliothèque de classes C-Sharp. Vous cliquez sur Suivant, puis nous allons
l'appeler carbo King up dot repositories. Ensuite, j'ai cliqué sur Next et
nous voulons que ce soit, nous pouvons le laisser comme un .net cinq, c'est très bien. Et créez. Une fois que nous avons ce nouveau projet, nous pouvons commencer à le disséquer en
configurant de nouveaux dossiers. Je viens de supprimer le
fichier par défaut fourni avec. Et le premier dossier
sera des contrats. Et l'autre
serait Repository. Mettez les conservateurs en pause. Techniquement parlant, ce que
nous voulons faire ici, c'est suivre le concept de ségrégation des
interfaces. C'est le moi en solide. Je continue de parler de solide. C'est un acronyme avec
vieux qui vous dit que toutes
les lettres que je les ai
cassées ne le font pas. Et chaque fois que nous mettons
en œuvre l'un d'entre eux, je vous oriente vers la droite. Nous avons donc examiné séparation des préoccupations, c'
est-à-dire le S. Nous avons examiné l'
injection de dépendance, c'est-à-dire le D, nulle part en regardant l'œil, ce qui est la ségrégation des interfaces. C'est pourquoi nous avons des contrats
et des référentiels. Le concept de
contrat fournisseur est que vous êtes en train de signer un
contrat pour faire du travail. Vous n'avez pas encore fait le travail. Cependant, le contrat est la déclaration
que vous allez
faire le travail et c'est
ce que vous
allez faire. À ce moment-là, nous allons
appeler ces interfaces car l'interface contient
les déclarations de ce
qui est possible, c'est-à-dire le libellé
du contrat. Ensuite, le référentiel actuel, ou ce que nous appellerons l'
implémentation, héritera. Le contrat ou l'interface
et être le travail réel. Vous auriez donc
signé le contrat. Le contrat est une dictée
de ce que vous allez faire. Mais plus tard,
vous le faites et vous le faites sous la
direction du contrat. C'est donc un peu l'espoir
que l' analogie ait du sens pour vous,
mais
vous verrez exactement ce que je veux dire au fur et à mesure que cela
se concrétisera. Commençons par
créer une interface dans
ce dossier Contracts. Et puis nous allons appeler, ce sera ce que
j'utilise la classe ici, mais nous allons
vraiment l'appeler référentiels génériques. Donc, en termes de convention de nommage, chaque fois que
vous avez une interface, vous mettez généralement un I majuscule et ensuite quel que
soit son nom, voir l'IA un référentiel générique. Et il s'
agira d'une interface publique, pas d'une interface publique de classe. Ce référentiel
générique aura les fonctions de base que chaque table
de base de
données,
où que ce soit, exécutera. Nous avons vu que nous pouvons
ajouter, supprimer, supprimer, modifier
et mettre à jour, essentiellement en utilisant ou
référentiel ou en utilisant
le contexte de base de données. Ce sont donc les mêmes opérations que nous devrions autoriser notre référentiel
générique eucaryote, sauf que nous allons écrire le code une fois que je suis allé
au générique de comptabilité de station c'est que nous sont en train de l'écrire
pour qu'il puisse se produire contre n'importe quelle
table transmise. Nous allons maintenant
aborder ce que nous
appellerons des génériques en C-sharp. Pour créer quelque chose de générique, vous utilisez
ce type de crochets. Il s'agit donc des crochets d'angle ou la distance supérieure à et la distance. Et puis, à
l'intérieur de ces crochets vous allez
lui donner un jeton. Donc, je l'appelle,
s'il vous plaît, suivez. Ce serait donc votre Tolkien
générique. En général, on utilise
des personnes utilisées comme le modèle
t ou t, l'entité T, l'alcool, les entités T. Donc, le TI
signifie simplement que c'est un générique. Quel est le générique ? Quel
est le type générique que je m' attends à ce qu'il s'agisse
d'une entité de type. Ensuite, je verrai une
entité où j'ai dit
me donner le
référentiel générique et c'est relatif à un générique
appelé l'entité. Et puis je suis allé préciser
où se trouve l'entité T. Je pourrais dire classe, je pourrais dire int, quel que soit le type de données que
je spécifie ici. Il s'agit essentiellement de dire que
c'est générique dans la
mesure où il correspond à ce
type de données que je recherche. Si je dis classe, cela signifie
que l'équité
passe littéralement n'importe quelle classe dans laquelle je ne veux pas nécessairement
faire. Au lieu de dire classe, je verrai l'objet de domaine de base. Ou bien, rappelez-vous
simplement en camionnant. N'oubliez pas que nous avons plutôt
l'entité de base. Désolé, j'ai dit « objet ». Il doit être basé sur une entité. On y va. Laissez-moi une entité. Chaque entité qui
se trouve dans notre base de données doit au moins être l'entité de
domaine Beast. De cette façon. Nous veillons à ce que nous
obtenions
toujours quelque chose qui soit réellement une entité de base de données. Je ne veux aucune autre classe moins qu'il ne s'agisse d'entités de base de données. C'est donc ce que je
spécifie ici. Les lignes rouges parce que je n'ai aucune référence
à ce projet. Alors, n'oubliez pas que lorsque nous sommes
assis avec Bridget, où ajouter une référence
au projet de données ? Eh bien, il existe
des référentiels institutionnels qui dépendront
du projet de données. Je dois donc ajouter cette référence. Je peux simplement ajouter une
référence et cela
ajoutera la déclaration d'utilisation
pour moi et tout. Et puis cette
ligne rouge disparaît. Très bien, ça a l'air bien. Ensuite, nous voulons avoir les méthodes dont nous savons que
nous allons avoir besoin. Encore une fois, il s'agit de l'
interface ou simplement du contrat. s'agit donc que d'une déclaration
de ce qui est possible. Ce n'est pas le code réel. La première chose que nous
allons avoir, c'est que nous allons
simplement utiliser
mes terminologies asynchrones. C'est donc une tâche qui
va renvoyer une liste. Je suis allé l'appeler
celui-là, j'ai tout compris. Nous voulons obtenir tout ce que nous voyons dans la base de données, tout obtenir. Pas de problème. Je ne pense pas avoir besoin de faire autre
chose avec celui-ci. Laissons-nous à
cela si nous devons le prolonger plus tard et que
le week-end l'a fait, désolé, cela devrait renvoyer
une liste d'entités de type T. Quoi qu'il en soit, quoi qu'il en soit, nous l'avons transmis en tant qu'objet de
domaine de base dans l'entité T, cette méthode retournera
dynamiquement tout ce que T NTT
obtient. Ensuite, le prochain de base
sera d'obtenir, un, voudra qu'un enregistrement soit
allé dire int id. Nous voulons
donc arriver à
un enregistrement par ID. Et ensuite, je vais
tout simplement remplir le reste pour que vous
puissiez faire une pause, reproduire cela. Mais en fin de compte, nous
voulons simplement ajouter une autre tâche en
renvoyant un booléen pour indiquer que l'enregistrement existe et que
nous transmettons l'ID. Nous voulons
insérer une entité T, quelque chose à supprimer
lorsqu'il obtient l'ID. Et je ne sais pas,
je ne veux pas
mettre à jour quand il aura l'entité D. Ce sont les
méthodes générales que nous nous attendons à appliquer à
chaque table. Encore une fois, c'est le
générique. Prochaine étape. Nous devons configurer une
classe qui va
implémenter ce comportement générique. À l'intérieur du dossier
des référentiels. Je vais ajouter une
nouvelle classe cette fois, et elle va s'
appeler référentiel générique. Allez-y et ajoutez-y. Et puis ce référentiel générique de
classe publique. Et il doit aussi être générique. C'est donc relatif à In NTT. Il le place dans un art qui
entre crochets l'entité et
hérite du référentiel
générique. Très bien, n'oubliez pas
qu'une fois de plus, nous avons le contrat et ensuite nous
avons la mise en œuvre. Nous avons signé que c' est le travail que nous
allons faire. Aucun travail ne commence. C'est l'héritage que
nous voyons, d'accord. Quoi qu'il en soit, le
contrat dit devrait faire. Je dois y aller de l'avant et le faire. Le référentiel
générique de l'héritage I. Ensuite, nous allons de l'avant et
contrôlons le point aux usages. Il va falloir bien
sûr spécifier qu'il s'agit d'une entité générique à t où t et t est de type domaine
BCE ne signifie pas entité. Semblable à ce que nous
venons de faire, sauf un peu plus de
nuance, parce qu'ils sont vus à
l'origine du deux-points, c'est l'héritage initial
et Delta One est la même décoration
que nous devons faites simplement pour vous assurer que
tout le monde le sait. L'entité signifie essentiellement ce que l'entité
doit représenter. Donc, la raison pour laquelle nous pouvons utiliser base, laissez-moi une nouvelle
fois une entité,
c'est qu' elle est utilisée par
toutes les entités. Donc techniquement,
alors que chaque entité possède
son propre type de données à sa base, il s'agit vraiment du même type de données sous la forme d'entités du
domaine abeilles. C'est donc comme un identifiant
unique pour tout ce qui
est une entité ici, ajoutez une nouvelle classe demain
qui est une entité. Il suffit d'en faire l'entité héritée
de b assumant, et automatiquement ils
partagent tous la même identité. Maintenant, cette ligne rouge va
être ici parce qu'elle dit que
je dois mettre en œuvre. Ainsi, une fois
que vous disposez d'une interface comportant des méthodes, vous devez implémenter. Vous signez donc le contrat et tout ce dont vous avez besoin pour commencer à
faire le travail. Je dois juste faire des points de contrôle. Et il est dit implémenter l'interface, appuyez sur Entrée et regardez cela. Il vient de générer
chaque talon de méthode par rapport aux
déclarations et fait ici. Si j'apporte des modifications
au lieu du contrat, je dois m'
assurer que je réponds au changement relatif
dans la mise en œuvre. Avant de commencer
nos implémentations, nous devons injecter. Donc, si j'ai besoin d'une connexion
à la base de données, je dois faire quelque chose de
similaire à ce que nous avions fait dans nos pages où nous avons
injecté notre contexte et tout
cela a été généré pour nous. J'ai expliqué ce qu'il faisait, mais il a été généré
pour nous cette fois-ci. n'y a pas de gauche et de
droite générique à nous dire. Commençons donc par
ce null. Pour commencer, vous pouvez simplement écrire
une tomodensitométrie OU appuyer deux fois sur Tab. Vous comprenez votre chemin, vous appelez le constructeur. Ensuite, je dois injecter une copie
de ma réservation de voiture dans le contexte DB. Je vais juste dire
réservation de voiture dans le contexte DB. Et c'est à l'intérieur du
paramètre du constructeur. Je vais juste
appeler ça le contexte. Très bien, nous sommes habitués
au mot contexte. Je ne changerai pas le nom ici. Ensuite, je ne fais que le conduit de contrôle. Et je peux voir créer un champ assigner des contextes,
mais quand je fais cela, vous voyez que cela ressemble à celui que l'on regardait dans nos pages. En effet, lisible en privé,
c'est juste que vous pouvez enlever l'excès, quel qu'il soit. D'accord, si vous utilisez la vapeur de Visual
Studio et que
vous devez être d'accord, cela signifie que c'est facultatif car vous avez déjà
l'espace de noms. C'est tout ce qui
se passe vraiment là, mais
c'est la même chose, carbocation, un
contexte, un contexte, puis
il l'initialise. Maintenant, remarquez qu'il utilise
un trait de soulignement ici, mais il ne nous a pas donné de
soulignement dans l'ensemble. Et donc personnellement, je préfère utiliser le trait de soulignement
car j'aime
voir les champs différents des autres variables
ou propriétés régulières à travers
cela sur la partition, j'ai tendance à utiliser soulignements. Je vais le remplacer ici. Point de contrôle. Et faisons le refacteur
Visual Studio à n'importe où ailleurs
est égal à être utilisé. C'est la seule raison pour laquelle vous
verrez le soulignement et nazis sur la place de
ces derniers un mois pour vous. Vous n'êtes pas obligé de le faire, c'est vraiment
ma conviction personnelle. Examinons
une autre ligne où nous devons initialiser
le DB sit. Si privé, en lecture seule. Ainsi, les champs en lecture seule, aussi perturbateurs que leur nom soit, un champ en lecture seule signifie qu'une
fois que vous avez défini quelque chose
comme nous ne le menons pas il ne
peut être défini à l'intérieur du constructeur
et nulle part ailleurs. Une fois ce fichier appelé, discuter est appelé, le
constructeur est appelé. Ces champs en lecture seule
seront initialisés et ils ne
pourront plus être
modifiés par la suite. Donc, si vous écrivez du code, que vous le modifiez
par inadvertance,
cela vous donnerait simplement
une erreur pendant l'exécution que T essaie de faire
quelque chose d'illégal. Le compilateur peut ne pas vous le dire, mais l'application
va définitivement planter car ce n'
est pas possible. Nous établissons une
base de données privée en lecture seule par rapport à l'entité t0. N'oubliez donc pas que
l'entité D représente l'entité de la classe, pour la base de données, et nous allons simplement
appeler cela un dB. Donc le conduit de contrôle. Et j'ajoute l'instruction d'
utilisation pour le problème
Entity Framework Core. Et puis, au lieu
du constructeur, le seul endroit où je
peux définir la valeur, je vais initialiser
cela en C. B B est égal au point contextuel. Et nous pouvons appeler cette
méthode appelée sit. Sit crée un jeu de bases de données par rapport
à l'entité t0, sans problème. Set. Et l'entité T. Je suis en train de récupérer la
base, la connexion. Il s'agit donc de la connexion à l'ensemble
du contexte de la base de données. Et puis dB serait la
connexion à la table spécifique par rapport à la table contre
laquelle je demande une action. Ca. C'est ainsi que tout se connecte. Commençons donc les
implémenter et
cela ne prendra pas trop de temps car nous
connaissons généralement le code qui doit être porté ou
déchiré dans la suppression. Examinons l'
opération de suppression que nous
aurions implémentée dans nos pages. N'oubliez pas que nous avons
des pages de suppression. Vous pourriez
les déplacer si vous le vouliez. Mais nous avions quand même fait notre propre
suppression dans l'index. Et qu'est-ce qu'il a fait ?
Tout d'abord, il l'a téléphoné, puis il s'est assuré qu'il n'était pas nul, puis il l'a supprimé. C'est ce que la suppression doit
généralement effectuer un test pour trouver l'enregistrement ,
puis elle dit de
supprimer l'enregistrement. C'est donc la même chose
dans cette implémentation. Tout d'abord, nous dirons que
l'entité var est égale à, nous pouvons voir un point DB de soulignement. Maintenant, db dot signifie la table
exacte dans laquelle je suis. Et vous remarquez que nous avons toutes
les méthodes à notre disposition. Nous dirons donc trouver
et nous utiliserons simplement un For async où ils
définissent cela comme notre tâche. Pas de problème. Trouvez donc asynchrone par ID. Ensuite, nous disons souligner le
point DB, supprimer l'entité. Très bien, ça a l'air bien. Donc, à ce stade,
ça se plaint parce que trouver asynchrone,
je n'attends pas. Et dans un instant,
nos poids vont recommencer à
se plaindre. Laissez-moi dire que c'
est arrivé, s'il vous plaît. Variable ce poids. Et ça va
recommencer à se terminer parce que la
méthode n'est pas asynchrone deuxième point de contrôle des maladies
et la convertit en AC pour moi. C'est un os et quelques uns à faire. La prochaine étape existe. Ce qui existe ressemblait, je pense que dans l'édition, nous avons
dû faire quelque chose avec un existe où il est dit contextes de
retour pointent la
table avec cette condition. Pas de problème. Je vais donc juste copier ce code et
nous pouvons le modifier pour voir pourquoi il est
légèrement différent. Donc oui, nous allons revenir. Nous ne retournerons rien
au contexte cette fois. Au lieu de cela, nous
retournons le soulignement DB parce que cela
représente
la sortie, la table spécifique cette fois, qui signifie que
je n'ai pas besoin de ces modèles de
voiture parce que je ne sais vraiment pas dans quelle table je suis jusqu'à ce qu'elle arrive cette implémentation
et initialise la BBC a supposé
que ce sont des contextes, pas des modèles de voitures, ça
peut être n'importe quoi. DB représentera donc tout
cela. Mais alors n'importe quelle méthode est toujours la
méthode que j'ai besoin d'utiliser. En fait,
il n'y a pas d'asynchrone. On y va. Et ensuite, il
examine la situation. Toute action doit
attendre, puis Contrôler les points pour les rencontrer à flot asynchrone, et tout le monde est heureux. Très bien,
se réunir gentiment et dire Voyez à quel point le code
ressemble beaucoup. Mais encore une fois,
c'est générique car ici, il est certainement à la
recherche de modèles de voitures. Et il se peut que nous ne
sachions pas nécessairement quelle entité
s'occupait à ce moment-là. Continuons
notre mise en œuvre pour que
nous puissions le faire et devenir
relativement simples. Tout ce que nous avons à faire ici, c'est dire que l'entité
var est égale à o, elle trouve un évier. Ce que je reçois
quelques erreurs ici. Premièrement, parce que c'est
une erreur mortelle. Cela ne devrait pas revenir, au moins tout renvoyer la liste vous permet de ne
renvoyer qu'une seule qui ne pose aucun problème. Il faut faire face au changement à la
fois dans l'interface et dans
l'implémentation. Donc get ne devrait pas
avoir de liste là,
il devrait simplement renvoyer l'entité de la
tâche T. Très bien. Ensuite, nous pouvons simplement
modifier cela ici. Parce que si nous montons, nous voyons que cette saison
se plaint parce que les deux méthodes s'arrêtent ne se
ressemblent pas quand j'ai fait
cette correction, ça ne se plaint plus. Très bien, ensuite, contrôlez point pour rendre
la méthode asynchrone. Et alors, tout le monde
devrait être heureux. Mais cela signifie que
tous les chemins ne renvoient pas de valeur. Je pourrais donc simplement changer
la phrase, dire « retour ». Oui, on y va. Ensuite, nous avons quelque chose de
similaire pour tout obtenir. Je vais juste dire « retour ». Au lieu de db.find a sink,
ce serait un point db pour
lister une synchronisation, une fois de plus, asynchrone, mais les inclusions,
insertion et mise à jour de
McCoy auront un code similaire. Insérez, nous disons juste dB async et nous ajoutons
l'entité qui en
async et nous ajoutons
l'entité qui
sera transmise et
voyons donc utiliser votre oh, attendez, j'ai rendu la méthode
Async et air void. Ils ne renvoient
rien de tel qu'une tâche. Celui-ci est nul. n'y a donc pas de méthodes asynchrones réelles de
mise à jour. Et c'est à cause de
l'ensemble de la concurrence ou concurrence
potentielle
dont nous avions discuté au cours des premiers jours. Parce que vous ne voulez pas risquer mettre
à jour les opérations
sur le même enregistrement, sur le même thread ou sur des threads
différents. programmation asynchrone
créera donc un thread différent. C'est pourquoi vous pouvez avoir
plusieurs opérations publicitaires, plusieurs opérations de récupération se produisant simultanément, mais une mise à
jour est un peu risquée. Vous remarquerez que ces
deux films ne sont pas nécessairement asynchrones,
pas asynchrones. Et il n'y a rien d'
asynchrone, le
double de l'attachement ici. Cela doit se produire
un à la fois, assurer la cohérence. Nous avons donc maintenant créé
tout notre
référentiel générique. Je vais juste faire un
changement de contrôle et B juste pour m'assurer que
tout se construit correctement. On y va. Non, je ne
vais pas aller plus loin. Je pense que c'est beaucoup d'
inflammation à absorber. Vous pouvez donc simplement examiner tout
cela et voir comment tous ces points se connectent les uns aux autres et comment
tout est lié. La dernière chose que je
vais faire, cependant, est d'ajouter une référence pour notre nouveau projet à notre projet de recherche de
glucides. Cela va me
faire réorganiser les dépendances
car je vais
ajouter un projet ou un
outil d'ami, un référentiel. D'accord ? Et le fait est que les référentiels ont fait référence
aux projets de données. Donc, si je supprime la
référence de données et que je fais une compilation
, nous voyons qu'elle
réussira toujours. À ce stade, nous n'avons donc pas
besoin d'une référence directe de notre application Web vers notre projet d'entité, car elle parle
aux référentiels. Les référentiels auront cet
outil de référence directeur, ces données. Ensuite, le projet de données contient les références tierces
à Entity Framework, Core et autres. La hiérarchie
est donc toujours intacte. Si vous regardez, vous
verrez qu'aucun de nos quotas n'est vraiment rompu. Mais en fin de compte, ce
que nous voulons faire, c'est que
ce contexte DB ne soit pas directement
injecté dans nos pages. Lorsque nous reviendrons, nous
allons refléter notre code de telle sorte qu'il ne sera
pas un bateau et enregistrera le dépôt que
nous avons créé. Ensuite, nous échangerons le
code pour utiliser le référentiel. Et ensuite, pour
des opérations plus complexes que celles qui besoin incluent sur certains
champs, etc. Nous allons regarder en entier. Nous devons modifier notre référentiel sur notre code pour faciliter ces situations
spécialisées.
26. Ajouter un premier code de référentiel: Les gars, bienvenue. Ce que nous venons d'
accomplir, c'est place un petit
wrapper autour de la révision contexte de
la
base de données et de
supprimer certaines des références
directes entre notre application Web
et la base de données. Nous avons donc mis dans cette oreille moyenne, que certaines personnes
décriraient comme la couche logique
métier. Parce que si nous avons
quelque chose de spécial à faire, aucune opération spéciale ne
voudrait
écrire le code inutilement
dans l'application Web. Nous voulions simplement appeler
une méthode, puis laisser cette méthode répondre
aux décisions et faire tout ce qui doit
être fait
de nature fantaisiste faute
d'expression. C'est donc ce que représente
réellement
notre couche de référentiel. Ce Lear peut grandir. Nous n'avons qu'entravé une grande partie des opérations
dans deux fichiers en ce moment. Mais il y a un potentiel de croissance et vous
verrez qu'il
devra s'étendre en fonction de certaines des opérations que nous devons réaliser
afin de
rendre les référentiels
disponibles pour injection de dépendances dans
notre application Web. Comme ce que nous sommes capables de
faire avec le contexte DB. Ce que nous devons faire,
c'est aller de l'avant ou démarrer et les enregistrer
en tant que services de sculpture. Donc, dans les services de configuration, n'oubliez pas que nous l'avons
modifié pour ajouter le contexte DB qui doit rester. Mais ce que nous pouvons faire,
c'est dire des services. Et nous pouvons voir ajouter
une portée entre parenthèses. Je vais dire le type de référentiel
générique
avec des crochets vides. Ensuite, je
lui fais savoir que là où vous voyez l'interface, elle est implémentée par le référentiel générique et
également avec les crochets serrés. Vous pouvez donc voir un code
similaire écrit de manière
différente où vous
dites ajouter une portée, un type de crochets
ouverts et
son implémentation. Mais parce que nous
utilisons des génériques, c'est ainsi que cela doit être fait. Et c'est juste un autre moyen. Il s'agit essentiellement du
même type de code. Plus tard, lorsque nous avons
des référentiels spécifiques et que vous verrez l'autre style
d'écriture de cette ligne. Mais pour l'instant, nous n'avons qu'à ajouter une portée. Il existe donc en fait quelques
types de modèles d'injection. modèles d'injection signifiant que les services de
trous sont injectés au cours de leur
vie du frisson à ce que nous appelons notre
demande ou notre gorge, l'exécution de l'application. Pour le contexte, nous avons ajouté une portée. Nous avons donc dû ajouter une
portée à l'école. Cela signifie que pour
effectuer une opération jusqu'à ce que vous ayez terminé cette opération, vous utiliserez une
instance de celle-ci, quel que soit le montant que
nous nous donnons. Dans ce cas, vous
utilisez une instance
du référentiel générique aussi
longtemps que vous
effectuez une
opération ou un ensemble d'opérations sur une page. Transient signifie que chaque
opération avec laquelle vous allez
commencer vous en
donne toujours une nouvelle. Donc, ajouter un transitoire, c'est bien si vous faites
cela avec un service d'escorte. Étant donné que le contexte DB est étendu et que le
référentiel générique repose sur une portée, nous pourrions facilement
rencontrer le référentiel transitoire ou sculpté. Pas de problème. L'autre est Singleton. Singleton, ce qui signifie
que je vais être une seule instance pour l'
ensemble de l'application. Il y a des moments où
vous le voudriez peut-être comme avec un fichier de configuration, quelque chose qui n'a jamais changé. Il ne s'attendait jamais à être dynamique. Vous le faites une seule fois. Vous n'avez pas besoin de changer
cela à chaque fois quelque chose se produit
ou chaque fois que le doctorat et le GCF peuvent en obtenir une
nouvelle instance. C'est plutôt pour nos opérations de
base et certains autres types de services, comme un service de messagerie, vous voudrez certainement
que cela soit transitoire car si plusieurs courriels
doivent être envoyés une fois, Vous voulez plusieurs objets
ou de l'encens, il n'est plus là. Et ils devraient fermer
dès qu'ils sont terminés. Vous pouvez mélanger et assortir. Vous n'avez pas forcément
à vous souvenir de
tous et à trouver lequel je suis tout le
temps noir. Mais certains principes
peuvent être utilisés pour déterminer lequel est le meilleur
pour quel type de service. Et ce service de base de données
est certainement le meilleur que Sculpt. Si vous vouliez un
indice, si vous
survolez le contexte Add DB, vous verrez qu'
il vous indique qu' il est défini par défaut. Tout ce qui
dépend du contexte de la base de données, il
suffit de le sculpter,
tout devrait aller bien. Maintenant que nous avons inclus
notre référentiel générique, voyons comment il fonctionne. Je vais donc
passer en un qui est très simple. Commençons par les micros. Moi dans notre mix Create Page quatre, ce que je vais
faire est au lieu d' injecter directement le
contexte DB dans, je vais changer le sel, donc je vais simplement supprimer le contexte DB de
l'injection. Et je vais dire que donnez-moi un référentiel générique pour
inclure des références manquantes. Et je peux voir un outil relatif. Je sais que je suis dans le mélange
, par rapport à la classe moyenne. Alors, je peux appeler ça comme ça. J'ai juste pensé que c'était le référentiel,
puis les points de contrôle. Laissez-le initialiser
un champ créé. Ensuite, je peux supprimer
les références
au contexte et au référentiel
sur le référentiel de partitions, elles viennent de le renommer. Non, il n'est renommé nulle part
en utilisant le référentiel au lieu du contexte. Et comme prévu, nous avons
quelques flèches qui semblent très bien. Non, il s'agissait d'une opération de création. Donc, cela signifie que au lieu de voir le point de mix de points de contexte m'ajouter, je peux savoir voir l'insertion de points
du référentiel. Et puis c'était asynchrone
après notre poids. Il est très important
que nous n'ayons pas
implémenté de sauvegarde des modifications dans
notre référentiel. N'oubliez donc pas que chaque fois que nous
augmentons les données, nous
devons appeler des modifications de sauvegarde. Si nous sautons par-dessus et que je peux
simplement faire le contrôle F12 pour passer à l'
implémentation de la méthode. Notez qu'il n'y a aucune
modification de sauvegarde n' est en
cours, n'est-ce pas ? Nous mettons donc à jour l'
endroit où l'insertion, nous supprimons notre absence d'enregistrement. Nous soulèverons donc cet onenote. Pas de problème. C'est pourquoi il est bon d'
attraper ces choses. Non. Je vais juste aller de l'avant
et je vais faire celle-ci une tâche qui
renvoie un int. Et ça va
être sauvegardé des modifications. Et cela est arrivé
parce que si les changements par défaut retournent généralement
un entier de toute façon, donc je ne fais que représenter cela. Eh bien, c'est comme
notre fonction supérieure. Donc, si je saute à
l'implémentation, ça va se plaindre, Hey, méthode
Union Avenue, veuillez
implémenter le contrôle point enter. Il n'est pas implémenté. Et puis, tout ce que nous avons vraiment
à faire, c'est de retourner le contexte. Nous avons donc souligné les contextes. Thought Save Changes est un puits. C'est asynchrone, donc je
dois attendre, bien sûr, Control dots MC méthode Async et supprimer l'espace
excédentaire. On y va. Non, nous pouvons voir si
GnG ne pose aucun problème. Ce que nous pouvons faire, c'est au lieu d' appeler les modifications Enregistrer
chaque fois que j'appelle, nous faisons l'insertion ici,
puis nous devons appeler Enregistrer les modifications
sur une ligne distincte. Nous savons que ces méthodes
doivent enregistrer les modifications. Il est assez facile pour moi de
simplement voir après l'insertion, après, si vous ajoutez, puis appelez votre méthode
locale Save Changes. C'est notre poids. Cela réduira le nombre de fois où j'ai, vous verrez les
modifications de Enregistrer
dans toute l'application car nous
savons que nous voulons faire une insertion, les teintes doivent être sauvegardées à travers tout ici. Pas de problème. Et puis tout se
déroulerait dans le même contexte. Donc, quel que soit le nombre d'
opérations que vous effectuez l'aide de l'instance de
référentiel WAN, il enregistrera toujours les
modifications à la fin du d. Alors attendons,
voyons si g et g, Donc l'insertion, et il enregistre toujours
les modifications avec la mise à jour. Et puis regardez ça,
euh, nous sauvegarderions les modifications
avec la mise à jour, euh, parce qu'elle
n'est pas asynchrone, donc aucun problème que nous ne pouvons
réfléchir au fur et à mesure. Et la suppression n'
est pas asynchrone, mais celle-ci était asynchrone car elle a fait
quelque chose d'asynchrone. Donc maintenant, nous pouvons faire passer
la
mise à jour des points de contrôle nuls. Nous pouvons rendre la méthode asynchrone. Mais au lieu de le
faire, je suis allé modifier l'interface et en
faire une tâche. Laissez simplement supprimer est une tâche, ce qui la
rendrait plus cohérente. Nous pouvons donc simplement voir la tâche
asynchrone Update. Et puis tout le monde est heureux de
connaître nos créations. Nous n'avons pas besoin de cette ligne
car une fois l'insertion effectuée, nous savons que l'insertion et l'enregistrement des
modifications se produiront. C'est en une seule ligne. Si nous devons apporter une modification
à un ensemble des inserts sont faits. Nous avons 1 référence. S'il y avait plusieurs
endroits dans l'application, vous devez effectuer ce
type d'opération. Et il voulait que partout
soit cohérent. Au lieu d'apporter des
changements de code à tous les endroits, nous avons 1 contrôle de 121 références à
moi, ces changements. Quelqu'un pour vous montrer
quelque chose. Et si, chaque fois que
j'avais besoin de sauver le changement, rappelez-vous que nous avions ajouté un acte créé et
laissez-moi retourner à la bête. Je veux dire, entité que nous avions
dit avoir créé un acte. Tu te souviens de ça ? Non. Non. Non. Nous n'avons apporté
aucune modification pour faciliter la création car je l'ai moi-même
supprimée de l'interface parce qu'ils y
voyaient un obstacle. Parce qu'en réalité, les utilisateurs
ne devraient pas être en mesure de le voir
ou d'interagir avec elle. C'est vraiment pour notre système
interne. Cependant, je veux m'
assurer que
chaque fois que je
les enregistre en cours de création, dévaloriser, est-ce que tout va bien ? Revenons à ce que j'ai dit, au lieu de le faire
à plusieurs endroits et pour tout ce que je peux rencontrer. Tout s'est passé à la
place du dépôt NIH. Cela me donne donc un peu plus
de contrôle sur les opérations. Cela dit, modifions notre méthode Save Changes
pour ajouter d'autres données, manipuler les données
ou tout ce que nous voulons faire auparavant. Il va en fait dans le contexte
de la base de données et enregistre. Ici, on peut
sauver les entrées
qui sont un bateau du contexte en
disant simplement pour se le permettre. Je ne sais donc pas combien de choses vont être sauvegardées à ce stade
parce
que nous aurions pu effectuer plusieurs opérations,
quelle qu'elle soit. Je vais donc juste
enregistrer pour chaque entrée dans le point contextuel. Et puis il y a ce trucker qui
s'appelle le changement de camionneur. Donc, en fait,
Entity Framework est en train de camionner que lorsqu'
ils vous ont donné une entité, il voit en fait
que vous avez modifié cette entité ? Est-ce que quelque chose au sujet de
cette entité a changé ? C'est pourquoi nous ne
ferions pas la mise à jour ? Nous voyons attacher
puis modifier les états pour les modifier afin
qu' Entity Framework sache
que cela a été modifié. Ainsi, lorsque vous voyez si
des changements sont changés ici, il saura automatiquement
quel type d'instruction
générer en fonction de l'
état de l'entité. instructeur T est donc ce qui est
utilisé comme registre
pour voir celui-ci changer. Celui-là, ce n'est
pas celui-ci qui n'a pas changé. instructeur est que je peux dire obtenir les entrées et puis c'est une collection pour que
je puisse utiliser des crochets non, pour les analyser dans quelque
chose de spécifique. Donc, quand je dis
quelque chose de précis, je peux dire donner
toutes les entrées. C'est notre voiture. Donnez-moi toutes les
entrées du modèle de voiture, mais je ne sais pas ce qui
est sauvegardé. C'est générique. Donc, au lieu de cela, je vais
dire tout ce qui
est enregistré qui est de
type entité de domaine de base, qui pourrait être n'importe laquelle de
nos entités que nous avons. Vous voyez, le simple fait d'utiliser ce
petit peu d'héritage nous
permet de faire de merveilleuses choses
génériques, n'est-ce pas ? Un peu de code pour servir de nombreuses tables et
simplement être flexible. Je veux dire que je reçois chaque entrée qui se trouve dans la structure de la chaîne qui est souvent la meilleure
pour moi en tant qu'entité. Et puis je peux étendre
cela pour dire que nous sommes assis
à jour créé. Je ne veux que ceux qui
ont l'état de l'entité en tant qu' états d'entrée de contextes
modifiés. Je peux le voir C'est là que l'
état Q point de l'expression
lambda est équivalent. Ensuite, les entités indiquent
qu' Entity Framework Core nous a donné. Et voici tous les états
potentiels inchangés, ajoutés,
modifiés, supprimés. Très bien, donc je veux que
lorsqu'il est ajouté,
je veux que toutes les entrées soient que
lorsqu'elles sont ajoutées, je puisse voir Entity point d'entrée. L'entité ici est merveilleuse. Le générique et les corps basés
sur cette entité de domaine. point créé est
égal au point temporel. Donc, tout
se réunit. Une fois que j'ai fait
cela, cela me permet de ne plus
avoir besoin de m'asseoir et nous sommes tous les deux assis
cette date créée sur chaque enregistrement
ou à chaque fois. Quelque chose est capable d'être assez
créatif pour aller à chaque code
Create Bij pour voir avant de
l'envoyer par McDonald créé
est égal à d time non, et les descendants, et je ne le
fais qu'un seul endroit. Une fois que quelque chose sera créé,
cela se produira. Ensuite, il enregistrera les modifications. Et vous pouvez étendre
cela à celui sur les deux choses parce que nous
aurions pu modifier une date. Vous pouvez donc facilement dire : Obtenez-moi où l'état
est ajouté ou modifié. Si l'état est
ajouté, le nouvel ensemble, ceci s'il est modifié, vous avez dit
qu'il n'a pas été modifié, etc. volent toujours. Je ne fais que vous montrer que c'est merveilleusement flexible. Donc, à ce stade, je vais
juste faire une construction rapide et
nous allons tester notre mix et
voir la différence, n'est-ce pas ? Non, les seuls changements que nous avons
apportés sont de créer Pj. C'est très bien. Créez donc un nouveau. Et je vais dire
tester un nouveau dépôt. Ce n'est pas moi. Mais allons simplement aller de l'avant
et cliquer sur Créer de l'art. Il y a donc encore des travaux. Regardons dans la
base de données et voyons ce qui est arrivé par les dieux
pour la période de date. Et donc,
fouillez jusqu'
à la base de données et déjà à être en train de faire de la carbocation. Dans notre tableau de mixage, le disque le plus récent devrait avoir le deet et nous y allons. Tous les autres avaient
la date par défaut, ce problème dans les données du panier, l'horodatage exact du
moment où il a été créé. C'est à quel point il
était facile de savoir si nous
modifions tous les
devis de création et je vais vous mettre au défi de le faire de
la même manière que nous avons modifié le modèle Create ici. Pour moi, je vais vous
mettre au défi aller faire de
même pour les couleurs, faire de même pour les modèles de voitures. Il devrait être assez facile
de faire de même pour les voitures. Oui, parce que le directeur technique est assez
simple. Mec qui supporte toutes
les créations et si
vous vous sentez à la hauteur, allez-y et faites la même
chose pour l'édition. Parce que c'est à peu près la
même chose où que vous ayez des
contextes où la sécurité dépend
du contexte, j'adore faire des choses. Voici la même attache avec les entités modifiées Cmd, G et G. C'est tout ce que nous avons
fait dans notre méthode de mise à jour. Où que vous en ayez, essayez de les échanger contre
le code du référentiel. Je vais donc le faire
et quand nous reviendrons, nous pourrons comparer ce qui a été fait.
27. Les pages de Refactoring: Bienvenue les gars de retour. Donc, lorsque
nous étions ici la dernière fois, nous avions un devoir où nous devrions
compléter d'autres pages. J'espère que vous l'
avez essayé tout seul. Et si vous rencontrez
des problèmes en cours de route, ce qui ne serait pas surprenant, n'avez pas l'impression de ne pas faire le travail
correctement ou ainsi de suite. Il y a certaines
parties qui auront besoin d'un peu plus d'
explications que d'autres. Mais en fin de compte, j'espère que vous l'avez
tenté et j'espère que vous comprenez ce que nous
essayons d'accomplir ici. Ce que je vais faire, c'est passer en revue
ce que nous avons fait la dernière fois. Ensuite, nous allons
passer en revue chacun des changements généraux. Et certains changements
nécessitent un peu plus de
code pour être écrit. Alors, faisons-les ensemble. Commençons par passer en revue ce que nous avons fait la dernière fois que
nous avons affaire à micros et nous avons modifié
la page Créer, n'est-ce pas ? Nous avons donc injecté
le référentiel sur notre page
Créer une page par rapport à moi, c'est un référentiel générique
relatif au micro. Ensuite, nous pourrions remplacer tout
ce code sophistiqué qui consiste à l' obtenir et à modifier l'histoire et la
densité par
une seule ligne de code. Juste l'insert. Passons à autre chose. J'ai donc
configuré ma page de suppression. Nous savons que nous n'avons pas
besoin de supprimer des bits. En fait, je
vais simplement supprimer la page de suppression juste là. Ensuite, examinons
les détails ensemble. Donc, les détails nous faisons la même chose, nous faisons notre injection. Nous remplacons donc l'injection
contextuelle par l'injection de
référentiel générique. Et là où nous aurions fait le premier
ou par défaut, obtenez cela. Nous venons de
remplacer cela par notre
dépôt de poids dot get
id dot volume. Si je vais trop vite ou si vous ne l'
avez pas encore fait, hésitez pas à faire une pause et à
reproduire au fur et à mesure, mais assurez-vous intérioriser les explications
du code au fur et à mesure. Examinons la modification. Même injection. Je suis sûr que vous commencez à réaliser notre thème commun
à travers le centre commercial. Non, tout
ce que nous avons à faire est d'injecter notre référentiel par rapport à notre référentiel par rapport à l'entité où un bateau
doit utiliser sur la page. Puis pour le on obtient cette ligne essentiellement lui, nous comme les
détails obtiennent la même ligne. Je n'ai pas modifié le trimestre
par défaut des chèques. Tous ces éléments sont
toujours nécessaires. Je remplace simplement
le code concernant
le contexte puis dans la publication, au lieu de changer l'état
pour le modifier et
d'enregistrer les modifications, je viens de mettre la mise à jour là. Parce que lors de la mise à jour, il va aller de l'avant et voir
si g et g l'est de toute façon. Nous n'avons donc pas à nous inquiéter de
quoi que ce soit de mal à cela. Tout ce que nous faisons, c'est de changer cela pour
mettre à jour à l'intérieur d'une prise d'essai et tout devrait
fonctionner de la même manière. Une autre modification de gestion des barres obliques aurait été avec l'existe. Exists n'était pas asynchrone, il s'agissait simplement d'un bool make privé
existait et il obtient l'ID. Je l'ai donc changé pour
dire, j'attends, référentiel qui existe
avec l'ID qui a rendu le chargeur de
mythe asynchrone. Ainsi, en utilisant le point de contrôle, il a automatiquement ajouté asynchrone au nom de la méthode. Aucun problème ne l'a rendu
asynchrone, aucun problème. Une autre chose que vous devez faire est de vous assurer d'
appeler un poids dans cette méthode. Appelez en haut ici. Les noms et tout le monde
pourraient
le faire, vous voulez utiliser IntelliSense, mais il suffit de vous
assurer de mettre cette ligne. Ces changements sont à peu près les mêmes changements
pour les mêmes pages, pour les couleurs car
ces deux pages ou ces deux entités n'
ont aucune dépendance. Les couleurs, la même chose, sauf que nous injectons notre référentiel
prêt à être colorié. Et puis nous utilisons la même ligne pour
un
besoin latéral de suppression. Je vais donc supprimer
ça pour plus de détails. Nous avons la même chose. Lorsque nous obtenons simplement les détails
de la couleur pour l'édition, nous avons la même injection
où nous obtenons la couleur. Et plus tard, nous mettons à jour la couleur si
nécessaire. L'indice. J'ai sauté sur l'
index pour le micro, également pour
la Mecque et la couleur. C'est assez simple. Participez ou
nous injectons ou des référentiels. La liste sera tout récupérée. Pas de problème. Je pense que cela devrait être mitigé. J'ai peut-être lu ça. Si ce n'est pas le cas, vous pouvez aller de l'avant. J'ai apporté ce changement. Ainsi, vous
obtiendrez tout et ensuite ON delete, tout ce que nous avons à faire
est d'appeler la suppression. Si Record ID est égal à
savoir, nous ne passons pas au téléphone. Sinon, nous appelons simplement la suppression
en passant l'ID d'enregistrement. C'est tout ce qu'il y a à faire. Jolie, simple et cohérente. Je ne voulais pas dire qu'
elle entend les couleurs. Pas de problème. Nous allons le faire
ensemble encore une fois. Et littéralement, je vais
juste copier cette ligne parce que c'est
essentiellement le même code. Et je peux remplacer tout cela
par cette seule ligne de code. Parce que tout le monde est appelé référentiel et que vous pouvez
obtenir des informations spécifiques si vous le souhaitez. Je ne dis pas que vous
devez l'appeler référentiel et que tout le monde doit l'appeler un référentiel. Vous voudrez peut-être être
spécifique et appeler ce référentiel couleur unique,
créer un référentiel, etc. Pas de problème. Mais au bout du compte, le code de base et
son apparence, la structure
sera toujours cohérente. que nous avons fait pour les couleurs. Nous l'avons fait pour
moi, cela ne pose aucun problème. Examinons les modèles de voitures. Et aussi un
modèle de voiture est un peu plus compliqué dans la mesure où nous
devons charger les données initiales. Vous voyez donc que j'ai fait certains
des changements et j'en ai
laissé un peu inconnu. Pensez juste qu'il
est là où vous étiez. Et si ce n'est pas le cas, sentez-vous
libre une fois de plus, faites une pause et reproduisez ce que
vous voyez sur mon écran. Nous avons déjà remplacé le code d'insertion dans la méthode post. C'est un modèle de
voiture d'insertion de référentiel, très bien, mais ensuite nous devons
obtenir la liste des mixages, ce qui signifie que j'ai besoin d'un référentiel
qui puisse me procurer le mix. Bien que
les prisons sous dépôt soient relatives au modèle
de voiture, pas de mélange. C'est là que vous voudriez
probablement obtenir des informations précises avec le nom
du référentiel. Donc, dans ce cas, je voudrais appeler ce référentiel de modèles de
voiture et je vais simplement renommer, et je vais simplement copier, coller trois, utiliser ce nom et renommer
en conséquence sono. Tout le monde sait qu'il s'
agit d'un référentiel de modèles de voitures. Donc, le référentiel de modèles de voiture
insérez cela. J'ai besoin d'un
référentiel relatif au mix. Pas de problème. Je peux facilement y aller. Je vais juste copier ce morceau, que vous dites que je
référentiel générique par rapport à moi. Et je suis allé appeler ce
dépôt de mixage. C'est là que le nommage entre
spécifiquement en jeu, puis les points de contrôle lui
permettent de créer un champ
assigné. Et l'injection se produit. Bien sûr, nous utilisons notre trait de soulignement. Et après tout cela, non, je peux simplement sauter
ici et me voir que x est égal à une nouvelle liste de sélection. Attendez le
point de dépôt de mixage pour tous. Regardez-moi ça. Tout le monde est content. C'est ça. Vous pouvez donc avoir
plusieurs référentiels sur
la même page. J'ai donc un référentiel qui
parle de la table des modèles de voitures. Et j'ai un dépôt qui
parle pour faire en sorte
que je devine ce qu'ils sont tous les deux
la même base de code. C'est vraiment tout ce que je devais
faire pour créer. Je dois donc répéter cet
exploit pour le rédacteur en chef. Bien sûr, nous savons
que ce que nous faisons, c'est en créer deux après avoir
répliqué avec modification. Je vais juste copier et
coller comme presque jamais ******. Je suis allé le faire encore plus rapidement. Je vais juste
prendre tout cela, apparaître et remplacer
tout cela dans l'édition, puis renommer le champ constructeur
ou le nom du constructeur. Mon référentiel, qu'est-ce
que les référentiels ? Pas de référentiel de modèles de voitures. Et puis encore le
référentiel de moteurs de voiture. Et alors ce serait notre référentiel mixte de
poids. Dot, prends tout. affacturage peut être fastidieux, mais il existe des moyens de l'accélérer
lorsque vous copiez NPS, quota
similaire, vous savez exactement quoi
le modifier. Regardons ça. J'ai mis quelques secondes à modifier et à créer à zéro. Je vais supprimer la page de
suppression pour moi. Je n'en ai pas besoin pour les détails. J'ai déjà changé tous les détails car nous n'avons besoin
que d'un modèle de voiture. Mais il y a
autre chose que vous devrez peut-être regarder, à la graisse
que le modèle
de voiture a mélangé. Nous devrions donc inclure les détails
du mix dans
les tables de modèles de voitures. Je ne pense pas que nous l'ayons
déjà fait. Je suis passé
au dépôt. Mais c'est quelque chose que nous
allons certainement devoir implémenter pour la page de détails
affiche correctement le micro. Nous n'avons donc jamais modifié
l'interface, sorte que nous n'avons jamais eu à modifier
les données qui reviennent. Vraiment et vraiment, ce devrait être nom de point du modèle
CAR
parce que nous voulions voir, et c'est le modèle de voiture
et c'est le micro. C'est lié à ce point. Nous devons absolument
modifier la façon dont nous
obtenons les données, car notre
Getty ne fait que récupérer les données. Mais nous avons déjà vu que
lorsque nous voulons obtenir les détails des dossiers
connexes, nous devons faire des
inclusions et ainsi de suite. Et nous ne savons pas
quoi inclure le générique car je ne peux pas manger simplement inclure quelque chose sur
la table car différentes tables ont des
propriétés différentes qui sont incluses. Nous sommes donc définitivement
allés
chercher un code personnalisé pour un
modèle de voiture dans ce scénario. Et puis, par extension, il va falloir l'étendre pour l'index, car lorsque nous obtiendrons toute
la page d'index, nous voulions probablement non
seulement afficher le nom, tout comme avec les détails, vous vouliez probablement également afficher le micro. Je veux dire,
c'est à vous de choisir. Celui-ci est probablement facultatif. Je ne vais pas étendre
l'indice pour montrer le micro, mais nous devrons le
faire pour nos voitures. Donc je n'ai pas fini de
regarder toutes les voitures, et vous pouvez voir
ici que j'ai certains types
de données erronés. J'ai fait un certain refactoring, refactoring
mondial qui a
mélangé un certain nombre de choses. Mais quand vous regardez ça, vous voyez que j'ai
un dépôt de voitures. J'ai pas beaucoup changé
sur le code ici. Mais nous avons ensuite le même
problème où nous avons besoin du mélange, des couleurs, des modèles qui
manquaient de façon suspecte. Nous devons les amener. Cela signifie que j'aurais besoin
d'un mélange de reperformance ou de lecture avant les modèles et
notre dépôt pour les couleurs. Oui, nous nous sommes débarrassés d'un référencement en
prenant tous les contextes
car, conceptuellement les contextes
ne devraient jamais interagir directement avec le contrôleur ou la page. Mais nous avons ensuite créé un modèle dans lequel nous avons créé une
telle délimitation entre
les trois types de données
que nous devons
injecter trois
instances différentes du référentiel. Comme toujours le voyez, il y a moments où vous faites quelque chose
parce que c'est logique, mais il est important de savoir à quel point vous devez vous baser
sur vos objectifs. Je ne résiste pas à cela. Allons de l'avant et obtenons ces
dépôts supplémentaires. Je ne voulais pas t'ennuyer
si tu me regardes le faire, mais c'est essentiellement à quoi ça ressemble et je
vais juste reproduire les lignes. Vous pouvez voir où chaque
ligne commence et s'arrête. suffit de dire que c'est très, très clair. Nous allons simplement de l'avant et injectons référentiel par
type dont nous avons besoin. Nous allons de l'avant et
initialisons ces champs. Non, par rapport à chaque appel, nous allons utiliser le dépôt
de panier. Je dirai donc
souligner le pirate. C'est donc le dépôt de voitures. s'agit du Create, donc il s'agit inserts et nous
passons dans la voiture. Très bien, toute analyse
que l'intelligence vous
guidera toujours pour surveiller types de données est nécessaire en
fonction du référentiel ou consommée. Nous y allons et
insérons notre voiture. Je n'entends pas. On s'occupe des modèles de voitures. Nous savons donc qu'il s'agit d'une liste déroulante en
cascade. Donc, à ce stade,
il faudrait absolument un code personnalisé. Parce que lorsque nous obtenons r obtient tous, nous recevons tous les
enregistrements une fois, mais ensuite nous nous
basons sur l'ID. Nous en obtenons un requis
en fonction de l'ID de la clé primaire ici. Nous ne faisons pas non plus
que tous les modèles de voitures étaient une ligne complètement différente est égale à des valeurs différentes. Nous avons donc vraiment besoin d'
avoir un code personnalisé pour cela, mais nous n'y sommes pas encore tout à fait. Veillons à ce que toutes nos méthodes courantes soient identiques. Donc pour le mix, alors je suis allé voir sur un dépôt de
mixeur de partition point obtenir tout. Ensuite, je peux simplement
remplacer chacun d'entre eux. Je vais simplement copier et
coller un nom de l'industrie, ce modèle de voiture. Je fais partie de ces référentiels
et c'était Colors. couleurs. couleurs.
Est-ce qu'on a de la couleur ? La couleur ? Laissez-moi simplement copier et
coller dans l'insensé. C'est lent là-bas. Très bien, donc au moins ces éléments sont corrigés. Maintenant, je vais faire
une pause juste là. Et si vous regardez la page de
détails et que vous regardez la page d'index, et comme je l'ai dit, pour la page d'édition et même la Créer où nous avons les listes déroulantes en
cascade, nous devons nous assurer que nous sont à la recherche
des cartes à l'heure actuelle. Lorsque nous
reviendrons, nous examinerons comment
étendre nos référentiels.
28. Références complètes: Très bien les gars, donc nous sommes de l'argent
et ce que nous allons faire dans cette leçon, c'est d'installer
des référentiels personnalisés. Permettez-moi de parler
des référentiels clients. Il arrive parfois que pour certaines entités ou
certaines opérations,
nous devons disposer d'un code personnalisé
qui ne peut pas être générique. Par conséquent, c'est le cas pour notre création où nous avons notre liste déroulante en
cascade. Nous avons vraiment besoin de méthodes
personnalisées ici pour faciliter
le contrôle des modèles de voitures dans cette situation
particulière. Cela signifie donc que je
vais devoir étendre des modèles ou des
modèles de voitures pour avoir son
propre référentiel avec ses propres méthodes personnalisées. Un autre exemple de la raison pour laquelle cela
pourrait être nécessaire serait comme lorsque nous voulons
regarder les détails ou même la liste des voitures, nous devons inclure ces détails spécifiques pour la voiture lorsque vous recherchez
sur le modèle de détails. Et lorsque nous parlons de
la liste sur l'index, nous avons certainement besoin
des Includes également. Ce sont des raisons
d'étendre votre code. C'est non, ce n'est pas vraiment un
terme officiel dans la programmation, mais j'appelle ça le développement
piloté par la douleur. N'importe qui ou d'autres
développeurs. Dans Driven Development, ce
qui signifie que vous faites ce qui est nécessaire pour atteindre
l'objectif visé. Et vous avez de la fantaisie quand
il voit nécessaire, mais vous ne
commencez pas seulement à le financer
parce que vous pourriez exagérer
quelque chose qui est très simple. Nous voyons donc à ce stade la
nécessité de ce refacteur. Alors, allons-y et faisons-le. La première chose que nous
allons faire est de revenir à notre projet de référentiels. Je suis allé sur les contrats avec le bouton droit de la souris,
puis je vais ajouter un nouvel élément et un nouvel élément sous
la forme d'une interface. Celui-là, je vais appeler
ça le référentiel des modèles de voitures. Nous savons ce dont nous avons besoin
pour le rendre public interface je référentiel de
modèles de voitures. Alors, qu'est-ce que ce contrat ? Quel est le travail que ce
contrat doit mettre en œuvre ? Eh bien, j'ai dit que vous
devez implémenter une méthode qui est une tâche qui renvoie
une liste de modèles de voitures, quelqu'un pour l'appeler obtenir des modèles de
voiture par doux, et cela prend un
paramètre int make ID. Maintenant, avec ce
contrat en place, j'ai besoin d'une implémentation
que je vais
appeler un référentiel de modèles de voitures. Et celui-ci sera créé
dans le dossier des référentiels. Et je me rends compte que j'ai mal orthographié les dépôts à ce stade. Je suis vraiment désolée à ce sujet. Les référentiels qui
savent qui aime certaines ramifications en dessous sont utilisés, mais c'est très bien. Nous pouvons les créer facilement. Allez-y et
créez ce nouveau fichier. Je vais juste aller de l'avant et
corriger l' erreur d'orthographe telle qu'elle était. Donc, sachez que lorsque vous avez votre classe
d'
implémentation , nous devons hériter de l'IA, un référentiel de modèles de voitures. C'est donc assez facile,
mais il va falloir il
s'agisse d'un héritage WE
car d'abord, ce référentiel de modèles
devrait être capable de
réaliser tout ce que
le générique peut faire. Il devrait être en mesure de faire
tout ce que générique peut faire, ainsi que tout ce qui est personnalisé. Notre nouveau contrat est réservé aux opérations
personnalisées
par rapport au modèle de voiture. Mais il doit
encore être en mesure de
réaliser tout ce que
le générique peut faire, c'
est-à-dire sauvegarder les modifications et
ceci et cela et cela. Ce que nous devons faire lorsque nous avons notre implémentation, c'
est hériter du référentiel
générique
par rapport au modèle de voiture. Très bien, nous assistons donc à
la mise en œuvre
du référentiel pour
notre modèle de voiture. Je veux en hériter, inclure toutes les références manquantes, ainsi que mon contrat de costume. Donc, lorsque vous regardez cela maintenant, et que je fais l'interface d'
implémentation du point de contrôle, il n'implémentera que le travail prescrit par ce contrat. Cependant, ils fonctionnent dans appliqués par le référentiel générique est également présent en arrière-plan. Oh, c'est me plaindre
qu'il n'y a aucun argument étant donné que cela correspond
à si j'hérite de quelque chose qui a un dépôt générique d'
injection, il y a une injection
pour le contexte. Si je fais appel au référentiel de
modèles de voitures, qui en hérite
, le référentiel des modèles de voitures
doit fournir tout ce dont la classe de base a besoin. Tellement courte, et ce n'est pas un constructeur
qui va
prendre les contextes de la CMDB
ou simplement le copier. Contexte DB de réservation de voiture, allez de l'avant et insérez toutes les références
manquantes, mais crée également un champ
attribué. Ensuite, je vais devoir
fournir la meilleure méthode. un exemple de contexte, c'est presque comme si une
chaîne de marguerite est comme un transfert. Donc Albert appelle le
contrat pour le modèle de voiture i, il saura que sa
mise en œuvre est la suivante. Lorsque cela est appelé, il récupère le contexte à partir
du conteneur IOC et dit, OK, base, qui est
notre référentiel générique. Voici une copie du
contexte que j'ai. Ils sont tous les deux sur le même fil de
contextes, non ? Non. Et puis j'ai également
la mise en œuvre
du coût des méthodes
pour le référentiel. À ce stade, obtenez des modèles
de voitures au micro. Je ne vais même pas
faire beaucoup de travail. Je vais juste
revenir à la
création de circuits dans les voitures. Nous avons la méthode de création
qui contient tous ces éléments. Je vais juste
copier tout ça. Retournez dans le référentiel de mes
modèles de voitures. Je vais coller tout ça. Les modèles VAR seront donc
égaux à nos poids, aux contextes ou au changement de nom. Renommons cela
dans les contextes carrés. J'attends donc les
modèles de voitures contextuelles où tout ça, et ensuite je
retournerai les modèles. Je reçois cette erreur
parce que ce n'est pas l'asynchrone, faites la méthode asynchrone. Et voilà, tout n'est pas bon. Nous avons donc maintenant un
référentiel de clients qui peut nous fournir les fonctionnalités personnalisées pour cette requête SQL personnalisée. Ce point dans la
création d'une autre division et voir si tout, tous les changements que nous lui
faisons toujours en appuyant toujours sur Control S dans ce référentiel. Je n'ai pas besoin d'avoir le référentiel
générique pour un modèle de voiture
car il va être
utilisé plus d'une fois. Ce modèle de voiture oui, référentiel de modèles de
voiture
est utilisé pour répondre à nos besoins pour obtenir la liste complète des modèles de voitures et
les obtenir par rapport à la marque d'identité. Je peux remplacer
le générique œil par référentiel de modèles de voitures
AI. Celui-ci n'est pas le générique, celui-ci j'ai besoin de
la méthode costal, l'obtenir par le doux. Et puis je ne peux pas faire de ligne rouge car elle
a toujours accès à OK. Je reçois une ligne rouge
et je pense que c'est parce que je n'ai pas hérité. Je m'excuse, j'aurais dû hériter du dépôt
générique à ce stade par rapport
au modèle de voiture. Très bien, donc de la même manière
que l'interface
héritait ou que l'implémentation héritée du générique. L'interfaçage est hérité
du générique de l'œil, de
sorte qu'il puisse voir
tout
le travail que le générique peut faire et
vous donner son propre travail. Ensuite, permettez-moi de revenir sur l'implémentation. n'y a pas d'erreurs
ici parce que je fais déjà référence
à l'implémentation, dont l'idée
consiste essentiellement à interpréter que c' là que le travail pour
qu'il
devienne grand et tous les autres
pour le R générique, ainsi que les méthodes personnalisées telles
que définies par le contrat
personnalisé, seront implémentées ici. Quand je
reviens à la création. Non, la ligne rouge n'est
plus là. On y va. Très bien, donc pour
cette partie,
je peux simplement
retourner un nouveau poids. Mon référentiel de voitures
obtient des modèles de voitures de Meek, lui donne l'ID Meek qui
est entré en paramètre. Ce qui élimine
tout ce code. Je n'ai pas besoin de ce code. Vous verrez encore une fois,
si ce code change,
je n'ai qu' un seul endroit pour le changer ou
il me semble juste, cela semble beaucoup
plus propre que d'avoir la
note écrite, tout le code contextuel au lieu de la page. Cela a l'air tellement plus propre. Encore une fois, si ça
marche, c'est bien. Il s'agit simplement de quels sont
vos objectifs et avez-vous besoin et maintenable
jusqu'à un certain point ou quels sont les problèmes que
vous essayez de résoudre ? Ne faites pas cela simplement parce que vous connaissez le schéma et que
je dois me tenir pour le
faire, faites-le parce qu'il résout
un problème que vous avez. C'est notre adaptation
aux modèles de voitures. Pour créer BH plutôt, remarquez que je suis un
modèle de voiture générique parce que nous avons ce nouveau référentiel personnalisé et qu'il doit
être injecté. Je dois laisser l'application que nous en avons une autre
qui peut être injectée. J'ai sculpté pour le générique, obtenant une erreur ici parce que cela change d'espace de
noms, pas de problème. Mais je
dois aussi ajouter une portée
pour que le nouveau client naisse,
n'est-ce pas ? Je suis donc allé dire Ajouter un support de type
école, modèle
de voiture, un
référentiel de modèles de voitures, coma. Et la mise en œuvre
de ce référentiel
sera de modèles de voitures. C'est la différence
en termes de dimensions. Donc, parce que celui-ci est générique, qui s'en sort différemment,
mais de manière générale, c'est comme
ça que vous verrez l'
interface ou l' objectif d'appairage du contrat et de l'
implémentation lorsqu'ils seront enregistrés
dans le conteneur du CIO. Très bien, c'est vraiment ce nous devons faire pour nous
assurer que cela fonctionne. Revenons à la partie
détails de la voiture. Eh bien, les détails
des pièces des modèles de voitures ont une histoire similaire où
où que nous ayons le modèle de voiture
générique, nous pourrions simplement utiliser
notre classe spécifique que nous
venons de définir le référentiel de
modèles de voitures. Au lieu du générique. C'est ce que nous utilisons chaque fois que nous avons affaire
à des modèles de voitures, car des méthodes
personnalisées comme obtenir le modèle de voiture avec les
détails ne sont pas nécessaires. Dans ce référentiel. Ce que je vais faire, c'est
revenir à notre contrat. Et je vais créer
une autre méthode qui va dire
retourner juste
le modèle de voiture. Et je suis allé voir le modèle
de voiture avec des détails. Ensuite, nous devons
vous donner l'idée
du modèle de voiture que nous
voulons récupérer avec des détails. Maintenant, une fois que j'ai fait cela et que j'ai mis ces petits onglets ici pour
pouvoir naviguer facilement vers le fichier. Donc, si vous n'avez pas ces
baignoires que je viens de
vous montrer, vous pouvez aller dans Outils ,
Options, aller à l'éditeur C prend, puis C-sharp que avancé et gorge
jusqu'au bas. Et c'est écrit « show
inheritance March », et c'est expérimental. J'ai donc vu cela fonctionner pour certaines personnes et
non pour certaines personnes. C'est juste pour que vous
puissiez activer cela. Cela facilite donc la navigation
entre les
classes parents et enfants en ce
qui concerne l'héritage beaucoup, beaucoup plus facile. Très bien, il y a maintenant une nouvelle
méthode à implémenter. Je vais juste
contrôler la mise en œuvre. Et puis je verrai ici que si je l'
obtiens avec des détails, ce que vous devez
revenir est mon contexte. modèles de voitures Dot, dot find
ne trouvent pas de modèles de voiture qui incluent et j'ai inclus ma
propriété de navigation pour le micro. Très bien, puis
à la fin
de toutes les premières valeurs par défaut
de la LLC. Expression Lambda où l'ID dans l'enregistrement est égal à
l'idée que je cherche. Donc, chaque fois que nous appelons cela, nous savons qu'
il est garanti d'acheter
les modèles de voitures
avec toutes les inclusions. Si on appelle ça le Gets, le habitué obtient son générique,
c'est ennuyeux Tod's. C'est tout ce que nous pouvons encore
une fois mettre en place des méthodes
spécifiques pour un référentiel spécifique, pour une raison spécifique. Revenons maintenant
aux détails. Et je peux remplacer cela par des modèles de voitures par notre modèle
actuel avec des détails. Je sais que lorsque le
modèle de voiture reviendra, il y aura certainement la propriété de navigation pour
le type de lait incluse. Pour les cartes. Nous avons un problème similaire. Nous avons besoin de méthodes personnalisées pour que le référentiel automobile puisse récupérer
ceux qui contiennent des détails. Et pour l'indice, nous devons y
inclure les détails. Également. Ce que nous allons
faire, c'est répéter ou pieds. Nous allons avoir un contrat
personnalisé et notre implémentation personnalisée dans
notre projet de référentiels. Voici donc à quoi
va ressembler le contrat. J'ai une fois de plus le référentiel de voitures, héritant du
dépôt générique par rapport à la voiture. Ensuite, nous avons notre tâche. voiture pourrait avoir une voiture avec des détails. Et l'implémentation NOR
va dire que le
référentiel de voitures héritant du référentiel générique par rapport
à la voiture et au contrat. Donc, tout est injecté comme nous l'avons fait
jusqu'ici. Et puis nous avons la méthode
obtenir une voiture avec
des détails, bien sûr, je l'ai rendue asynchrone et un poids et le même code que celui qui
était dans la page de détails, je l'ai juste coupé et
collé ici. J'ai pesé les voitures
contextuelles avec tous
ces détails et j'ai obtenu
le premier ou par défaut. Dans notre page de détails, nous pouvons commencer par ne plus
injecter le contexte, mais maintenant nous pouvons injecter un référentiel de
voitures ou un référentiel de voitures. Ce serait, je peux
juste appeler celui-ci. référentiel
n'en est toujours qu'un. Pas de problème. Référentiel. Incluez les références manquantes, allez l'avant et créez
NSA et le champ. Je supprime toutes les traces
du contexte, puis j'ajoute le trait de soulignement juste
pour ma
tranquillité d' esprit là où nous arrivons, je dis juste que le dépôt
doit obtenir la voiture avec des
détails et lui donner
la valeur id dot. Si je ne l'ai pas expliqué
auparavant parce qu'il est petit, multiple, je dois
voir la valeur du point d'identification. Et bien sûr, après ça. Et comme je l'ai dit, j'ai fait un peu de refactoring sur Visual Studio qui a changé
trop de choses là-bas à 1. Certains de mes
types de données sont donc erronés. Mais après avoir réparé ça et je suis sûr qu'il
n'avait pas ce problème. Vous verrez ici que tout va
bien avec notre page de détails. Et cela semble beaucoup plus propre. Nous devons donc faire quelque chose
comme ça pour l'indice. Maintenant, je dis quelque chose
comme ça pour la prochaine fois parce que c'est multiple, c'est une liste complète
avec les détails. J'ai besoin d'une autre
méthode ici qui me donne la liste. Hors de la voiture. Je suis allé dire que j'avais des
voitures avec des détails. Et il n'aura aucun paramètre. Et ça devrait être une liste. Nous allons chercher la liste
des voitures avec des détails. Pas de problème. Mise en œuvre
Kohlberg jusqu'ici, interface d'
implémentation de lot
contrôlée. Et je vais juste répéter
cette déclaration de retour ici. Retournez donc le contexte des voitures avec
toutes les listes de points inclus. Et il faut que ce soit une chose
si contrôlée par la
méthode de make async et avec un
point-virgule et c'est correct. Donc, dans notre page d'index, tout cela ne peut pas
être un référentiel et bien
sûr, je dois mettre à jour le constructeur
et l'injection. Je vais juste
le raccourcir. Il suffit de copier une flèche similaire, de
changer les quelques flèches. Et puis je peux remarquer un point de dépôt obtenir des cartes avec détails et le fermer bien
sûr après 08. Et c'est essentiellement qu'
il semble manquer les types de données mixtes et
nous devrions être prêts à partir. Dans d'autres endroits. Nous allons avoir la suppression sur
post, pas de problème. Je n'ai donc rien
à trouver. Je n'ai pas besoin de
vérifier si les voitures ne sont pas. Au lieu de cela, si l'enregistrement
N'EST PAS NUL, je verrai le référentiel. Et bien sûr, je vais
devoir attendre ce dépôt Dot Delete et nous lui donnons
la valeur de point d'ID d'enregistrement. C'est ça. Pas de code agréable et propre que vous n'avez jamais vraiment
voulu coder derrière cela pendant que
les instructions et toutes les
opérations complexes et ainsi de suite. Vous voulez faire abstraction de cette ALT. Tout cela devrait faire,
c'est appeler une méthode, porte au mythos,
faire le travail acharné. J'appelle la méthode et j'
attends la réponse. Vous faites tout le travail
et vous
me dites simplement quel est le résultat. Je suis allé à ce stade, construire juste pour m'assurer que j'ai apporté tous les
changements nécessaires. Et j'ai une flèche parce que dans mon démarrage, j'ai l'espace de noms
mal orthographié, mais je dois m'
assurer que je l'ai fait. Avant le dépôt de voitures, je vais vous montrer
quel type d'erreur vous
verrez si vous ne parvenez pas à ajouter le défaut d'
enregistrement de votre service. Il va
donc juste Control F5 pour s'exécuter
sans débogage. obtiens cette autre
flèche parce que j'avais rebaptisé Meek to mix. Très bien,
laissez-moi essayer encore une fois. Contrôle F5. Et notre application
cherche à mélanger les couleurs et les modèles juste pour s'assurer
que nous voyons les données. Nous voyons donc ici que nos
référentiels fonctionnent. Si je clique sur Modifier, effectuer une modification puis enregistrer, nous constatons que les modifications ont été
enregistrées avec succès. Nous savons donc que les référentiels qui
travaillent à cet égard, si nous regardons les autres qui les
voient tous revenir. Donc, si je clique sur les
détails des modèles, vous verrez que le micro
arrive, les détails reviennent. Maintenant, si je clique sur les voitures, fermons toutes ces voitures
et cliquons sur les voitures. Maintenant, regardez ceci que vous ne parvenez pas à résoudre le type de
service pour référentiel
i cars
en essayant d'
activer les modèles de points d'index. C'est juste une façon
chic. Je vais voir. Vous avez oublié de placer l'enregistrement dans
le fichier de démarrage car nous ne l'avons pas fait. Vous remarquez que tout
a bien fonctionné pour les modèles. Tous fonctionnent bien pour le modèle. C'est le même concept. Donc parce que nous n'avons pas
enregistré de voiture, donc
je dirai simplement que le référentiel de voiture est implémenté par le référentiel
de voiture. Inclure toutes les références manquantes
ou désolé, c'est des voitures. Continuez à oublier ça. C'est le dépôt de voitures.
On y va. Je peux simplement faire une build
et actualiser
la page ou la réécrire en D, sans déboguer et cliquer sur la page du cours.
Je sais qu'il est en cours de chargement. Vous voyez que cela
bloque une erreur. Si vous oubliez l'enregistrement
de votre service. Et par extension, regardez ça. Nous voyons tous nos détails. Si vous allez dans Modifier, nous
voyons tous les détails. Si nous allons créer ou une liste déroulante en cascade avec toujours fonctionner comme
nous l'attendons. Très bien, donc ce sont de
petits changements que vous voulez faire
douter des vacances. C'est la clé propre. Mais encore une fois, pas
parce que vous avez un marteau, tout devrait
ressembler à un Neil. La plupart des fois que nous apprenons un modèle et la nef que
nous
voyons, nous avons utilisé ce bouton. Certaines applications sont
assez simples pour que vous n'ayez pas à y ajouter ce niveau d'abstraction
et de complexité. Mais au bout
du compte, nous voyons où ça va définitivement. Un pare-feu, il augmente la façon dont l'
application est maintenable. Il va l'être.
29. Conclusion de la section de dépôt: Très bien, donc si vous tournez un autre jalon et que nous allons nous enregistrer vers le référentiel
GitHub. Faisons donc un
bref récapitulatif de ce que nous avons vécu dans cette section. Tout d'abord, nous avions identifié
que nous voulions réduire une partie de la répétition trimestrielle
et augmenter la maintenabilité globale et la testabilité de notre application. étape numéro un pour ce faire était de créer ou de référentiels. Nous avons donc créé ce que nous appelons
le référentiel générique qui avait très, que dois-je dire, non,
générique pour un, mais très
abstrait pour déclarer la forme de base montrée, c'est que chaque élément de base de données
aura besoin. à réaliser. Ce faisant, nous avons
pu utiliser deux fichiers pour
compenser de nombreuses tables de
base de données. Ainsi, entre le référentiel
générique et
le référentiel générique, nous avons suffisamment de
couverture
de code pour presque tous les scénarios de base de
chacune de nos tables
de la base de données. Par extension, nous sommes
en mesure automatiser certaines choses
que nous aurions dû
faire sur un moniteur personnalisé
ou de réaliser plusieurs endroits. Chaque fois que nous
créons un élément, pu l'automatiser,
quel que soit l'élément créé ou nous savons comment le faire passer à l'entité de domaine de
base, ce que chaque élément sera. Chaque entité ou autre le sera. Et quand il est ajouté, nous pouvons tout modifier
avant de le valider
dans la base de données. Ce sont donc des opérations très importantes
dans ce que nous faisons. Après avoir eu nos référentiels
génériques, nous avons également réalisé que
certaines opérations
nécessitaient une touche personnalisée. Donc, au lieu de toucher
les choses génériques, nous allons dans la tête et l'avons étendu. Donc pouvoir étendre une classe sans modifier
la classe principale, c'est le principe de Liskov
et c'est le L en solide. Nous envisageons l'
injection de dépendances car nulle part créer des objets pouvant
être injectés à volonté, nous regardons le sec, ce qui ne se répète pas. Nous examinons la ségrégation des
interfaces, c'est
pourquoi nous avons
tous ces contrats et leurs implémentations. Nombre de principes qui
entrent dans la période de quatre ans. Alors, que voulons-nous étendre ? 104
référentiels déjà implémentés et ont vu sans la superposition, le
modifiant et en voyant bien, référentiel
générique, les choses
ménagères spécifiques à autre chose. Nous créons nos modèles spécifiques, je suis un référentiel de modèles de voiture avec uniquement
des opérations liées aux modèles de voitures qui nécessitent peu de touche personnalisée. Nous avons la mise en œuvre et nous avons également le
dépôt de voitures. J'ai dit à partir de, je pense
que notre modèle précédent serait bien quand nous ajouterons une voiture pour voir si le partage des licences
existe et si c'est le cas, ne l'ajoutez pas, je me souviens avoir vu
que ce serait C'est agréable à faire. Nous n'avons jamais eu le temps de le faire. Voyons simplement à
quoi cela ressemblerait. Encore une fois,
tout ce dont vous avez besoin, vous le mettrez dans le dépôt
correspondant. Donc, dans ce cas, je
vais juste dupliquer ça. Désolé, c'est un modèle de voiture que
je voulais dans les voitures. Je vais donc
dupliquer cette méthode. Cela ne va renvoyer
qu'un booléen. Boolean va voir
obtenir la voiture si la leçon est divisée existe. Cela prendra un numéro de plaque
extrême. Je vais juste
dire jouer le numéro. C'est là son paramètre. Une fois de plus, si nous avons
dans l'interface, nous passons à la
mise en œuvre. Et puis cela va se
terminer et nous allons à Control dots, laissez-le implémenter l'interface. Et puis je pourrai revenir au contexte. S'il vous plaît, regardez dans la table
des voitures et dites-moi s'il y en a. Et bien sûr, nous utilisons notre asynchrone. Tout numéro de plaque
d'immatriculation asynchrone q-dot est égal au
numéro de plaque qui est arrivé. Bien que parce qu'il s'agit d'une chaîne, vous voudriez probablement tout
mettre en bas car les majuscules sont différentes des minuscules à inférieures. Une autre chose que vous voudriez
faire est probablement de le couper de
n'importe quelle espèce qui
pourrait se trouver sur l'autel. atteint. Avec ces deux éléments sur
ce qu'il y a dans la base de données, vous vouliez également qu'il y ait une valeur
quelconque. Tout sera en minuscules
et tout sera coupé de tous les espaces blancs. Ensuite, nous vérifierons
s'il y en a. Je dois donc attendre
ce contrôle des points. La méthode Async. Maintenant, c'est étendu,
agréable et facile. Si nous voulions incorporer
ce nœud de vérification dans notre opération Créer et par extension,
l'opération de modification. Ce que je peux faire, c'est faire ma
propre vérification ici pour voir si je peux voir sur le référentiel de partition
ou les points du référentiel de voitures. Commencez à taper les leçons
divisées jusqu'à ce que je les vois. Ce que je ne suis pas, je
ne vois rien parce que c'est
toujours le générique. Pas de problème. J'utilise mon costume. J'ai le dépôt de voitures
et je peux le remplacer partout pour que l'
injection fonctionne correctement. D'accord. Tout le monde va bien. Sono Way. Si je regarde en arrière, je verrais que
j'ai accès aux méthodes personnalisées est
inférieur à ce que
le fractionnement existe. Et puis je passais le numéro de
plaque d'immatriculation qui vient du formulaire. S'il existe. Ce que je voulais faire, c'est rendre
l'état du modèle invalide car aucune plaque d'immatriculation n'
est présente, elle est valide. Je veux qu'il soit invalide. Ceci est en place pour que je
puisse dire état du modèle, erreur d'ajout de
points, erreur de modèle. Et cela prend deux paramètres. Il indique quel est le
champ que vous voulez que j'ajoute l'outil d'erreur et quelle est
l'erreur pour le champ ? Vous pouvez utiliser une chaîne, mais je vais vous montrer
le danger ou
l'un des problèmes qui utilisent
le flux comme celui-ci. C'est très bien. Je veux qu'il soit
ajouté à ce champ. Et le message doit indiquer que le numéro de partage de
licence
existe déjà. Lorsque j'ai fini ajouter l'
erreur de modèle et que cette instruction
va voir qu'elle n'
est pas valide car
il y a une erreur. Je l'ai fait. Ensuite, il rechargera le pH indiquant l'erreur
sous le champ. Vous pouvez expérimenter ça. Je ne vais pas vraiment
tester ça. Ce n'est pas ce
que j'essaie de pousser. Ce que je disais à propos du
champ, c'est qu'en raison de forte saisie et
si c'est un cas où nous finissons par changer
le nom de ce champ, nous devrions nous rappeler que nous devons
mettre à jour la chaîne. Il ne changerait pas
automatiquement. Donc, pour garder le désir fort
de ce que nous faisons, c'est de voir le nom de nous passons dans le
nom direct de la variable. Il va donc simplement le convertir en numéro de plaque
d'immatriculation et savoir que ce sont
les femmes de terrain. Il s'agit du message d'erreur. Pas de problème. Je montre simplement à
quel point il est facile
de savoir d'étendre la
fonctionnalité. Il est déjà injecté. Tout ce que j'ai fait, c'est
changer le type de données, qui est une opération unique. Comme vous devez l'étendre, vous n'avez qu'à mettre d'autres méthodes
et vous les utilisez pour le faire. C'est tout ce qui aurait
été nécessaire pour étendre cette fonctionnalité afin que
vous puissiez la tester. Comme je l'ai dit, nous devons également le
faire dans l'édition. Permettez-moi donc de le faire et de m'
assurer que nous avons une couverture complète. Avant ces postes. Nous devons le faire. référentiel Kiara est
encore une fois le générique. Je dois donc dire
ici que j'ai un dépôt de voitures. Très bien. Changez cela. Je pense que les référentiels ont
peut-être leur propre espace de
noms, mais je vais résoudre ce problème. C'est très bien. À ce moment-là. C'est tout ce que nous
devons vraiment faire pour nous assurer que nos contrats et
tout sont extensibles. Vous pouvez donc aller de l'avant
et tester cela. Je suis désolé, j'essaie juste de
trouver ce que je devais
changer. Qu'est-ce que les autres. Incluez son référentiel de voitures. Excuses. Très bien, IQR est un référentiel et
tout devrait bien se passer. Il utilise les instructions nécessaires, toutes les erreurs ont disparu
et le même type de validation
se produit lors de la modification. C'est à quel point il est facile d'ajouter des validations
personnalisées grâce à
nos méthodes de base de données personnalisées. Avec nous. C'est tout, j'ai fini.
Allons-y avec de bons changements. Une fois de plus, les changements
devraient être apportés à la société. Si ce n'est pas le cas, vous allez voir et ouvrez la
fenêtre, obtenez des modifications. Vous allez entrer votre message de
validation. Et puis vous pouvez tout
commettre et couler. Cela poussera vos
modifications vers GitHub, réduira les modifications apportées par vos collègues en conséquence.
30. Configuration de l'authentification utilisateur: Les gars, bienvenue.
Donc, à ce stade, nous avons beaucoup de
fonctionnalités qui fonctionnent pour nous. Et même si cela ne semble
pas si sophistiqué, vous avez réalisé ou achetez
que toutes les applications
font, lisent à réalisé ou achetez
que toutes les applications
font, partir de la base de données, à jour des données,
y mettent des données, ou suppression de données. C'est tout ce qui est
vraiment là. Peu importe à quel point cela peut paraître
compliqué. Tous les fonds mangent peuvent sembler. C'est tout ce à quoi il se résume. Si vous voulez étendre cette
application pour faire plus de choses,
en mettant plus de tables, je veux dire, c'est ce qu'on appelle la réservation de voiture. Et nous aujourd'hui, c'est tout
ce que nous faisons, c'est de mettre dans les voitures. Si vous souhaitez pouvoir effectuer
la réservation réelle, il n'y a pas
de problème. Voyons ce que je fais. Cependant, avant de vous mettre
dans cette fonctionnalité bêta, je voulais sécuriser l'
application dans une certaine mesure
, car nous n'en avons pas besoin. Nous devons être en mesure de savoir qui fait quoi
dans notre application. À ce stade, n'importe qui peut simplement exécuter l'application
et commencer à ajouter des voitures, en m'ajoutant des modèles passionnants. Nous voulons limiter
certaines choses à un
utilisateur que j'ai enregistré que nous connaissons. Et plus tard, nous avons
examiné comment nous pouvons établir des niveaux entre les
différents utilisateurs
capables de faire les choses
dans notre application. Nous allons
commencer par étendre notre contexte DB pour pouvoir gérer les opérations
liées aux utilisateurs. En fait, c'est
plus simple qu'il n'y paraît. Tout ce que nous avons à faire, c'est au lieu
de dire les contextes DB, nous disons identité, contexte DB. Identity est le framework ou la bibliothèque
qui nous est donné par dotnet core pour commencer à ajouter des opérations
liées aux utilisateurs à notre application. Donc, en voyant le contexte de base de données d'identité pour l'héritage,
je contrôle les points. Vous verrez que je dois
inclure de nouvelles bibliothèques. Nous utilisons NuGet Weekend
pour dire installer un package, trouver et installer des buds. N'oubliez pas que nous avons rencontré des problèmes de
gestion des versions avec Entity Framework Core et
la version de la bibliothèque. Il est en fait plus sûr de
simplement utiliser NuGet manuellement. Je vais donc cliquer avec le bouton droit sur
Gérer les paquets NuGet. Et pour notre installation, nous savons que nous travaillons actuellement
avec 5.8. Je vais donc aller voir
des bros et je vais chercher l'identité. Je dis juste que j'ai été identité, noyau d'
identité et ensuite nous voyons Microsoft.ASP.Net Core
à Entity Framework Core. C'est donc celui que
nous voulons et ensuite nous avons affaire à 5, c'est ça. C'est ainsi que vous utilisez le gestionnaire de
paquets NuGet pour vous assurer que toutes les versions
sont sur le même foie. Puis j'ai cliqué sur Installer, lui
permettre de faire son truc, accepte tous les problèmes
qui surviennent. Lorsque cela est fait, je
peux revenir à mon contexte DB et inclure
l'instruction use manquante. On y va, et
tout le monde est content. Très bien, j'ai l'air bien jusqu'à présent. Non. Dans notre dossier, ça commence. Nous verrons que nous avons
une petite erreur ici lorsque nous ajoutions
les contextes DB. Et c'est dire que nous avons
besoin des instructions d'utilisation. Donc, je vais juste
au contrôle des points. Et il est dit installer le package référence ces données ou simplement ajouter
un outil de référence. Je vais juste
ajouter la référence. Je vais plutôt utiliser
une version locale. Je vais donc utiliser la version locale. Et c'est une autre force
de la gestion des paquets. Cela nous permet de nous
assurer que ce n'est pas le cas, que toutes nos versions
sont au même niveau. Sachez donc que l'erreur a disparu et
toujours au démarrage. Et ce que nous devons faire, c'est faire
savoir à la startup que nous utiliserons les
services d'identité dans l'application. J'ai donc dit que les services dot add devraient voir l'identité par défaut. Si ce n'est pas le cas, alors à
l'identité, on y va. Vous pouvez donc ajouter un noyau d'identité. En ajoutant les connaissances essentielles de l'identité, ils indiqueront quels types d'utilisateurs, le type d'utilisateur par défaut que vous obtenez avec les identités, l'utilisateur d'identité. Et nous avons examiné comment cela
peut être étendu à quelques-uns. Mais nous ajouterons simplement avec l'utilisateur d'
identité mis dans les instructions
manquantes, puis nous pourrons transmettre
des options si nous le voulons. Donc, quand je dis qu'il peut
passer des options, je peux voir des options avec une expression
lambda, des options. Et nous pouvons explorer
différentes options que nous souhaitons utiliser pour nos utilisateurs. Et il y a des cônes. Par exemple, ce que nous
allons faire, c'est voir les options sur une connexion nécessitant une confirmation d'
un cône à savoir comme lorsque vous vous inscrivez à
notre site Web et qu'ils vous
envoient le Tolkien pour vous dire, s'il vous plaît confirmer leur deux-points , qu'
est-ce qui est jusqu'à la date d'échéance. Vous ne pouvez pas vraiment vous connecter. Eh bien, c'est ce que nous
pouvons faire respecter ici. Je peux voir exiger un compte
confirmé. Par défaut, il
sera nécessaire. Donc je vais juste
dire que c'est faux. n'est pas parce que c'est une application
interne je ne
vais probablement pas subir les rigueurs demandant à quiconque de confirmer
ses cônes de toute façon. Mais je ne fais que
vous montrer ce qui est possible. Vous avez donc un tas d'
options à votre disposition. Et si vous devez en définir plusieurs, vous pouvez simplement le faire à l'
aide d'un bloc d'objets. Et vous terminez chaque ligne par un point-virgule et vous ajoutez
autant d'options que nécessaire. Nous ajoutons le noyau d'identité
par rapport à l'utilisateur d'identité, qui est une classe
d'utilisateurs par défaut qui nous est donnée par Identity Framework
ou Identity Core autre. Et puis on peut dire ajouter des règles. Si nous voulions utiliser des règles, nous pouvons dire que je veux utiliser des
règles sur la classe de lignes. Il y en a un par défaut
dans la règle d'identité. Une fois de plus, nous pouvons
personnaliser cela. En général, je ne
personnalise pas celle-ci, pour être honnête, j'
utilise généralement une règle par défaut. Ensuite, à la fin de
cela, nous devons lui dire
ajouter des magasins Entity Framework. Je dois donc
lui dire où
stockons-nous nos informations utilisateur ? Donc, ce serait vraiment
demander notre contexte DB. Quels contextes
dois-je utiliser pour déduire quelle base de données je
dois stocker les tables liées à l' dans
quelle base de données je
dois stocker les tables liées à l'
utilisateur. Maintenant, le problème
est que certaines personnes aiment utiliser la même base de données pour les applications et les
utilisateurs. Certaines personnes les séparent. Dans cette activité, je vais
rester simple et je vais
utiliser le même contexte à la
fois pour les choses habituelles
et pour l'utilisateur. Une fois de plus, certaines
personnes se sont séparées. Donc, si vous vouliez le séparer, vous devez créer
un autre contexte de base de données. Tout comme tout ce
que nous avons ici. Ce que vous pourriez faire, c'est laisser celui-ci comme héritant uniquement des contextes
DB et qu'il crée un autre contextes DB qui hérite des contextes de bases de données
d'identité. Il n'aurait pas besoin de tables
car vous verrez comment l'héritage de
justice
nous donnera les tables que nous voulons. Et alors, tout irait bien. Et bien sûr, vous devez avoir l'autre
chaîne de connexion ici. Et vous configurez votre
contexte DB en conséquence ou votre
contexte d'identité en conséquence. Il faut quelques bits
de configuration, mais encore une fois, le
chemin simple utilisant une base de données, nous avons déjà le contexte. Nous avons juste besoin de ces trois lignes. Ensuite, nous pouvons ajouter l'application de magasin Identity
Services. Et il saura qu'
il devrait se pencher ce contexte de base de données pour
tous ses besoins de connectivité. Très bien, donc une fois
tout cela fait, nous pouvons passer à notre console
Package Manager. Et lorsque ce projet est
ouvert et en cours d'exécution, nous pouvons modifier le
projet par défaut tel que nous le savons. Nous l'avons défini sur des données. Et je dirai ajouter mon accord. J'ai fait des tables d'utilisateurs. Maintenant, remarquez que je n'ai rien fait. Je n'ai pas créé de nouvelle entité. Je ne l'ai pas fait La seule chose que j'ai faite contexte DB pour que
l'héritage change. Mais regardez le fichier de
migration qui est un bateau à générer. Nous avons donc une migration
migra. Regardez cette
grande agrégation. Vous devriez maintenant vous familiariser
avec les migrations. Je vais simplement indiquer quelles
tables sont en cours de création. Obtenir un pour les règles, un pour les utilisateurs. Et vous voyez que tous les champs
sont générés pour l'utilisateur. Et tous ces éléments sont
relatifs aux utilisateurs d'identité. Donc, juste en voyant l'utilisateur d'
identité ici, nous obtenons que tous
ces champs
obtiennent des revendications rove, des revendications d'
utilisateurs et un tas d'autres tables contenant
un tas de choses. Certains d'entre eux ne peuvent même
jamais utiliser des créations, des index
et des clés étrangères. Et puis, bien sûr, ne vous
contentez pas d'annuler tout cela. C'est ce qui vient de changer l'héritage
à partir de contextes VB, ce contexte de base de données d'identité, c'est ce
qui résulte du changement. À l'intérieur de la console Package
Manager. Si je mets à jour base de données et que je lui permets d'avoir
son chemin avec la base de données, ce que vous remarquerez, c'est que dans la base de données, nous obtenons un tas
de nouveaux tubes diront si je fais
juste un rafraîchissement rapide et que je regarde dans la base de données et dans les
tables dont nous disposons. Vous verrez que toutes ces nouvelles tables sont
ajoutées à la base de données. Laissez-le juste là. Vous placez
vos tables d'utilisateurs. Il sait où stocker les informations
utilisateur et vous
n'avez pas eu à vous asseoir
et à écrire un code personnalisé. Et tout code personnalisé
que vous êtes sur le point d' écrire est vraiment dû aux besoins
de votre entreprise. Parce qu'il voulait
réparer dans la plupart d'entre eux, mais prêts à l'emploi, bibliothèques
d'identité rencontrent cette
âme Paul nourriture et si facile. Donc, lorsque nous revenons,
nous avons examiné l'extension table de
notre utilisateur car
actuellement les utilisateurs sont stables, oui, il y a beaucoup de colonnes, mais vous remarquerez
qu'il ne s'agit pas nécessairement colonnes
utiles dans des termes comme un
cadre commercial ou des idées. Nous avons une pièce d'identité, oui ou non. J'utilise un nom et un
e-mail, mais nous ne connaissons pas le nom de la personne. Je ne
sais pas qui l'utilise. Cela est basé uniquement
sur leur nom,
prénom , nom de famille,
même date de naissance, tout ce que vous voudriez stocker à la
fois l'utilisateur et simplement
imaginer cette application comme une application sera utilisée dans accompagnez n'importe quelle entreprise dans
laquelle vous êtes. Vous, ils veulent savoir qui
vous êtes lorsque vous vous connectez. Ils ne veulent pas être en mesure
de voir toutes les informations. Eh bien, c'est là
qu'il commence à le stocker. Lorsque vous êtes créé dans ce système, ils sont
généralement mis en ordre. C'est à ce moment que
nous reviendrons, nous examinerons comment
étendre la table à volonté.
31. Étendre la table des utilisateurs: Très bien, les gars. La dernière fois que nous étions
ici, nous avons cherché à configurer les
tables d'identité dans notre base de données. Nous devons maintenant savoir
comment étendre ces tables
à différents domaines. Nous allons commencer
par l'utilisateur d'identité. Il ferme certains champs, ce que je veux plus de champs. Un moyen facile de le faire
serait dans les données, il suffit de créer un nouveau dossier. Je verrai l'identité afin que nous sachions que tout ce qui se trouve dans ce
trou est lié à l'identité. J'ai donc un cours, pour que vous puissiez nommer la
classe n'importe quoi. Ainsi, le nom le plus populaire que vous verriez l'utilisateur de son application. Mais encore une fois, comment vous appelez-vous ? C'est à vous, à vous, à votre
opération et à votre objectif. Disons que l'utilisateur de l'application. Il s'agit d'une classe publique
qui va
hériter des
traits de caractère d'un utilisateur d'identité. Identiter les utilisateurs, l'
utilisateur par défaut, je vais dire, accord, eh bien, vous avez tout ce que possède un utilisateur
par défaut. Mais vous l'avez aussi, c'est là que nous pouvons
commencer à mettre String prénom, nom de famille. Si vous vouliez saisir une carte d'identité d'employé, vous
êtes toujours
en vol ou quelque chose d'
unique à cette personne. Je vais donc m'arrêter au
prénom et au nom de famille. date de naissance, je
pense que l'ajout
de la date de naissance serait
une bonne activité. Date de naissance. Très bien, c'est tout. Non, nous devons
obliger l'utilisateur à être la classe d'utilisateurs par défaut
chaque fois que
nous effectuons nos opérations, que nous avons accès aux champs
supplémentaires côté code, mais nous devons également étendre la base de données qui
doit réellement être stockée dans ces champs. Donc, une fois au démarrage, je dois changer le
noyau AD Identity de simplement voir l'utilisateur d'
identité pour savoir voir l'utilisateur de l'
application
en fonction du code chaque fois que nous faisons quelque chose
d'utilisateur, d'utilisateur,
plutôt utilisera ce type de données et nous donnera
accès à ces champs. Pour la base de données, nous devons
revenir à notre contexte
et ensuite à identifier le contexte
DB ni par crochets d'
attaque qu'
elle devrait utiliser. Et si vous regardez les
crochets de type dites me donner l'utilisateur. Si j'essayais la carte, la voiture IV fonctionnerait. Ils veulent juste une
classe si j'utilisais une voiture, non, l'ère change, non, l'ère change,
il dit qu'il ne peut pas être utilisé comme paramètre de type pour l'utilisateur t. C'est ce qu'il a dit. N'oubliez pas que lorsque nous
parlons génériques et de types de données, il est indiqué utilisateur T, où l'utilisateur est de
type utilisateur d'identité. Il doit donc s'agir une entité de
type utilisateur d'identité,
comme l'utilisateur de l'application
que nous venons de laisser hériter. Je peux donc le savoir, mettre l'utilisateur de l'application là
et tout le monde est content. Sachez que le contexte DB
sait que j'utilise l'utilisateur de l' application si
j'effectue une nouvelle migration. J'ai donc dit que j'avais utilisé, j'ai fait plus de champs utilisateur
que ma migration. Il va réévaluer le
savoir et dire, accord, j'ai affaire
à un nouveau type de données. Et ce nouveau type de données contient des
colonnes que je n'ai pas prises en compte, telles que la date de naissance, le
prénom et le nom de famille. Allez-y et
ajoutez-les à la base de données. Il ajoute cette colonne à
la table des utilisateurs ASP NET. Ces colonnes. Lorsque je fais la mise à jour,
se termine avec succès. Et si je regarde en arrière
mon idée d'être stable, après un rafraîchissement rapide, je verrai mes nouveaux champs joliment affichés dans la table des utilisateurs d'
ASP NET. Prénom, nom
et date de naissance. C'est ainsi que vous pouvez
étendre vos classes lorsque vous avez affaire aux opérations liées à
l'utilisateur. Juste pour le voir, on
aurait pu étendre la règle de l'identité. Et si la
stabilité des règles n'avait pas assez d'informations ou
autant d'informations que vous l'auriez souhaité. Il ne dispose que d'un ID utilisateur. Désolé, ce n'est pas le bon. Vous rôles, rôles il y a des règles ont nommé nom
normalisé, système d'organes
chroniques. Je ne sais pas ce que vous voudriez
probablement ajouter d'autre, mais je vous montre simplement que nous pouvons étendre
l' utilisateur de l'
application
par l'héritage ,
puis l'utiliser en place. Off est de la même façon que vous
pouvez étendre des rôles ou tout ce qui a l'identité du préfixe à
peu près devant elle. Donc, tout ce que nous avons fait n'
est que de la configuration. Lorsque nous reviendrons, nous
examinerons comment configurer notre page d'inscription
et permettre aux utilisateurs de se connecter.
32. Configurer la page d'inscription: Les gars, bienvenue. La
dernière fois que nous étions ici, nous
parlions de laisser les utilisateurs s'inscrire et
de les connecter. Je vais donc réduire tout ce que nous allons
faire ou quel projet je vais
fermer tous les onglets qui ne sont pas directement nécessaires. Et à l'intérieur de notre application, je peux cliquer avec le bouton droit de la souris, aller sur Ajouter. Et je vais voir un
nouvel objet éraflé. Maintenant, sous cette boîte de dialogue, vous verrez qu'il existe une
catégorie qui indique identité. Lorsque je double-clique sur Identité, il le fera si ça vérifie. Ensuite, il
évolue vers l'écran où il est
écrit Ajouter une identité. Vous pouvez remplacer tous les fichiers. Donc le
fait est
que lorsque vous obtenez le fichier de modèle est en quelque sorte, ils vous sont en quelque sorte
cachés parce que nulle part nous n'avons vu de pages de connexion ou de registre,
elles sont en quelque sorte cachées. Mais lorsque nous
voulons les écraser, nous pouvons facilement dire
que nous voulons passer
outre ou nous pouvons choisir
ceux que nous voulons remplacer. Dans cette situation,
je voudrais
remplacer la page d'
inscription et
le contexte qu'elle devrait
être par rapport à sa réservation de voiture dans le contexte DB. Je n'ai pas besoin d'
ajouter la classe d'utilisateurs ou quoi que ce soit d'autre pour non, tout ce que je veux, c'est m'inscrire. Ensuite, il peut aller de
l'avant et appuyer sur Ajouter. Il faudra un certain temps pour
faire l'échafaudage. Bien sûr. Lorsque c'est fait, nous
obtenons ce fichier README. D'accord ? Nous n'en avons pas vraiment besoin
, mais si vous regardez, vous verrez que nous avons un
nouveau dossier appelé zones. Et si vous effectuez une exploration vers le bas, vous voyez des pages d'
identité, puis
vous obtenez quelques nouveaux électeurs. Ne faites pas ce fichier de registre. Et si vous le remarquez,
il s'agit également d'une page Razor. Par défaut, ces uber sont des pH quelle que soit la
température du projet utilisée. Voyons donc ce que le
registre nous donne le CSS. Html5 nous donne un formulaire
où nous recevons une entrée par e-mail sur
les sentiers piétonniers où ils souhaitaient
confirmer le mot de passe. Nous savons que nous avons d'autres
domaines dont nous avons besoin, de
sorte que nous pouvons toujours étendre
cela comme nous le devons. Dans le code de registre qui se trouve derrière, vous remarquerez qu'
il s'injecte. Oui, il nous demande
le contexte DB, mais notez qu'il n'
injecte pas de contexte DB. Au lieu de cela, il injecte
ce que nous appelons un gestionnaire
de connexion et
un gestionnaire d'utilisateurs. Ils sont relatifs à l'utilisateur de l'
application. Je vous montre juste que
tout est connecté. Le raisonnement pour voir
l'utilisateur de l'application et non l'utilisateur d'identité
est au démarrage. Nous lui avons dit que lorsque
vous ajoutez de l'identité, tout ce qui est lié à l'identité,
utilisez des utilisateurs d'applications. Donc aucun
code dégénéré ne sait qu'il ne s'agit pas d'identité de la tension utilisateur
est l'utilisateur de l'application. Notez que cela ne donnait pas de flèche car ils pouvaient être
utilisés de manière interchangeable. Cependant, je ne vais pas aller à l'
encontre du code généré et regarder le fait
que nous avons le gestionnaire de
connexion
ainsi que le gestionnaire d'utilisateurs. Il s'agit donc de
bibliothèques intégrées qui nous sont données par la bibliothèque Identity Core. C'est le plus bas, la
gestion
des opérations liées à la signature et tout ce qui est
essentiellement exploité par l'utilisateur est lié à l'utilisateur, désolé, opérations,
obtention d'un utilisateur, modification de quelque chose à
propos de l'utilisateur, etc. Donc, tout est
injecté ici et vous verrez qu'
il y a un expéditeur de courrier électronique. Nous n'avons pas encore implémenté de services de
messagerie électronique. Ce n'est vraiment qu'
un porte-place qui peut être écrasé ultérieurement. Nous recevons également l'enregistreur oculaire, qui est par rapport à
la page sur laquelle nous nous trouvons. Si vous remarquez en haut, nous avons cet attribut qui est
son autorisation anonyme. Nous examinons donc plus en
détail les attributs plus tard lorsque nous
discutons de la façon dont nous pouvons autoriser l'authentification Auth0
par rapport à certaines parties de l'application,
plutôt que la façon verrouiller certaines parties
du application. Passons donc à autre chose. Dans ce modèle qui
a été généré pour nous, vous voyez que nous avons acheté une
propriété au-dessus de cette entrée. C'est donc un schéma
que nous avons déjà vu. Si nous regardons dans nos pages, nous voyons que pour Create, nous avions déjà fait quelque chose, généré quelque chose de similaire à cette propriété sur l'
ensemble du modèle appelé voiture. Cependant, dans cette situation, vous remarquerez que le modèle est
en fait le moniteur d'entrée est réellement défini
ici à l'intérieur de la page, une classe à l'intérieur de nous modèles de buff
ougandais, mais je ne fais que les montrer pour vous que même si cela semble
légèrement différent, c'est la même chose. Vous aurez un cours. Et cette classe a les mêmes attributs que ceux que nous
avions mis requis. C'est une adresse d'anémie, c'est un nom complet que
nous voulions que nous ayons utilisé tous ceux avant et c'est juste une propriété appelée email où en voir d'
autres, mais ce sont les mêmes choses. Nous avons la vérification de la
longueur de la chaîne et celui-ci est un mot de passe, puis celui-ci dit qu'il s'agit
d'un mot de passe et il devrait être comparé avec le mot de passe en haut et afficher ce message d'erreur
si ils ne correspondent pas. C'est tout. C'est pourquoi nous n'avons que trois
champs dans le modèle d'entrée, qui est utilisé sur le formulaire. C'est pourquoi le
formulaire est lié à passe de points
d'entrée de courrier électronique d'entrée
ou il. point de saisie confirme le mot de passe Ensuite, en dehors
de tout ça et obtenez, il suffit d'une URL de retour, nous pouvons nous débarrasser de certaines de
ces lignes de code comme celle-ci, les connexions
externes et ainsi de suite. Nous n'en avons pas nécessairement besoin. Au moins, nous n'allons
pas les mettre en
place dans le cadre de ce cours. Mais une fois le formulaire soumis, nous voyons ici que si l'état du
modèle est valide, est relatif, une fois de plus,
à tous ces attributs en haut. Nous créons un nouvel
utilisateur d'application qui transmet les détails provenant du formulaire, du
nom d'utilisateur et de l'adresse e-mail. Et ensuite, nous créons. Voici donc notre gestionnaire d'utilisateurs. Dot crée Async, un nouvel utilisateur utilisant le mot
de passe entré. Sachez que le B2B ou les
mots de passe sans importance est que vous ne stockez jamais de mots de passe en texte
brut dans la base de données ? Oui, l'utilisateur ne peut
taper le mot que lorsque vous tapez pasteur est
le seul type dans les mots et les chiffres
tels que vous les connaissez. Toutefois, si vous deviez
voir ce qui était stocké
dans une base de données, vous ne devriez
jamais le reconnaître. C'est-à-dire que c'est la défense
numéro un contre les hackers. Hachez vos mots de passe. Sachez
ce qu'il y a de bien à propos de ces bibliothèques, c'est qu'en
appelant cette méthode, tout cela est fait pour
vous en coulisses. Vous n'avez donc
même pas à vous soucier la sécurité du stockage des mots de
passe une fois que vous utilisez cette
méthode pour créer l'enregistrement utilisateur et lui donner le mot de passe tel que
saisi par l'utilisateur. Si la personne a été créée
avec succès, vous venez de l'enregistrer,
puis nous générons le code. Donc, lorsque nous parlons de confirmer votre adresse e-mail et
nous vous enverrons l'e-mail. C'est le code qui
génère ce genre de conversation derrière la requête LINQ qui
est liée pour confirmer. Très bien, veuillez confirmer leurs cônes en cliquant ici. C'est à ça que ressemble cet
e-mail de confirmation. Encore une fois, nous n'avons aucun service
immunitaire en cours d'exécution, n'est-ce pas ? Et nous pouvons également contourner
ce morceau pour non. Et puis ils disent si, et ensuite c'est le cas,
nécessite un compte confirmé. Est-ce que ça semble familier ? Car rappelez-vous que lorsque nous le
configurons Identity Core, nous avons dit que non, nous n'avons pas besoin de cela. Ici. Nous voyons si les options
indiquaient que cela devrait être nécessaire. Ensuite, nous avons lu la page de confirmation du
registre, qui ressemble à
une page shell pour prétendre que vous
cliquiez sur le même lien ici. Sinon, il suffit d'aller de
l'avant et de les signer. C'est donc ce que la
signature asynchrone est quatre. Ensuite, nous obtenons toutes les erreurs. S'il n'a pas réussi à créer l'utilisateur, nous obtenons les erreurs,
puis nous les renvoyons dans l'état du modèle à la
page. Il y en a plusieurs. Je voulais juste que vous
compreniez ce que
fait ce code parce qu'il
peut paraître écrasant, mais nous devons y
prêter attention. Vous verrez que toutes les
variables, tout le code est écrit de telle sorte que si
vous venez de le lire, vous pouvez
suivre ce qui se passe à chaque moment. Essayons ou une page
de distribution. Ce que je vais faire dans notre page de mise en page
partagée. Oh, j'ai remarqué que nous avons également
obtenu cette connexion partielle. J'ai raté ce point. Cette partie de connexion était accompagnée de
l'activité d'échafaudage et cette connexion PowerShell
dispose de l'outil de liens. Voir ici, il s'agit de
s'inscrire ou de se connecter. connexion partielle, c'est
simplement nous donner les liens
dont nous avons besoin pour vous connecter ou vous enregistrer. Et si nous étions connectés, il vous dira bonjour, utilisateur
connecté. Et déconnectez-vous s'il vous plaît. Ce que je vais faire dans la mise en page est utilisé de manière aussi partielle dans la barre de navigation. Aller à l'intérieur de cette div
qui a déjà la barre de navigation. Et tout ce que nous avons à faire, c'est
s'il vous plaît l'intrusion
partielle, le nom partiel est égal à la
connexion partielle. Très bien, en dessous de
ça, vous allez faire une section. Indiquons ceci
pour un contrôle de rotation. Si la première chose est d'accord,
c'est une ère de bateaux, aucun type de service qui
constitue une erreur d'injection. Et il est soluble dans le
gestionnaire de signatures pour l'
utilisateur de l'application de savoir que le gestionnaire de connexion est utilisé dans
la partie pour la connexion. C'est dire que cela n'
a pas été enregistré. Sachez que pour revenir au démarrage, ce que je fais, c'est modifier la bibliothèque ou la
fonction que j'utilise ici, j'utilise AAD identity core. Mais si je tape
simplement une identité ou un CDF, j'irais l'iodure d'
identité par rapport à AD Identity core
en deux paramètres de type TTX, et cela
le définit comme identité par défaut, alors que les
ensembles de noyau d'identité de certains choses. Mais je crois que ce qui se passe, c'est qu'
avec Identity Core, vous devez enregistrer
votre liste d' identités à
la demande en enregistrant tout. Alors qu'avec l'identité
où je dois dire, eh bien, le noyau d'identité de l'USU et je veux
aussi ce service et ce service, au lieu
de compliquer la configuration,
je vais juste Cochez Identity core et utilisez AD Identity a également supprimé la
ligne qui a ajouté les règles
car l' entité iodure veut un utilisateur et notre type de rôle dans
les crochets de type. C'est donc à ça que
ça va ressembler. Cette ligne n'est pas un service
qui a ajouté une entité à un utilisateur. Donc, si vous regardez
ceux surchargés, quelque chose d'utilisateur de type T et
quelque chose de règle de type T. Par conséquent, l'utilisateur
serait l'utilisateur d'identité, l'
utilisateur de
notre application dans ce cas. Et une ligne d'identité pour
la règle de type t. Tout cela étant fait, laissez-moi contrôler F5 et réessayer. Aucune obligation ou obligation n'est en cours de chargement. Et non seulement il se charge, nous savons comment l'outil est
lié dans la barre de navigation. Donc, si je clique sur s'inscrire, cela ne me parle pas de
l'expéditeur de courriels. Alors n'oubliez pas que j'ai dit que
nous faisons ce service que nous
n'avons pas encore. Ce n'est pas un problème. Ce que je vais faire n'est pas injecté, donc je vais juste
le
retirer de l'injection ici et
entrer dans le panier et je le
laisserai partout où il est
utilisé, nulle part. Je vais y entrer.
Donc, partout où les
objets de l'expéditeur de courrier électronique étaient utilisés, il suffit de commenter ce qui est
indiqué pour une utilisation ultérieure. Cela devrait donc
résoudre ce problème. Laissez-moi encore contrôler la F5. Et cette fois, quand je vais m'
inscrire, ça marche. Très bien, vous voyez ici c'est à quoi ressemble le
formulaire. Nous recevons un mot de passe par e-mail, confirmons le mot de passe, puis quelque chose sur l'utilisation d'un autre
service ou l'enregistrement N'oubliez pas que nous avons ce fichier, afin que nous puissions modifier ce
formulaire d'inscription comme bon nous semble. Par exemple, je veux plus de
champs dans leur distribution. Je ne veux pas seulement l'
adresse e-mail et le mot de passe. Nous savons ce que c'est
que nous avons un nom d'utilisateur et nous avons envoyé un e-mail. Il s'agit de deux domaines différents. Cependant, la façon dont
le formulaire qu'il
configure la marque maintenant, il ne fait que
demander un e-mail, mais il utilisera cela à la fois dans les champs
EMEA et nom d'utilisateur. C'est à vous de décider si vous vouliez
les séparer et si ce n'est pas le cas, vous pouvez le laisser tel quel. Cependant, j'ai besoin que
le prénom et le nom de famille soient
ajoutés à ce formulaire. Je suis donc
retourné à mon formulaire d'inscription et je vais
ajouter d'autres zones de texte. Donc avant l'e-mail, je vais entrer le prénom du point
d'entrée. Donc, tout ce que j'ai fait, c'est copier tout
le bloc pour courrier électronique et je vais déjà chercher à
modifier les formulaires. Cela devrait donc être rudimentaire pour
vous à ce stade. Je vois juste des gènes,
des gènes supplémentaires que j'ai créés pour FirstName et LastName multi-cellules qui
obtiennent ces lignes rouges parce que FirstName et LastName n'existent pas dans l'objet d'entrée. Qu'est-ce que cet objet d'entrée ? Si je contrôle clique et saute
sur son modèle d'entrée, qu'est-ce que le modèle d'entrée ? Le modèle d'entrée est ce que
ces champs ont été définis ? Je ne vois pas. Je veux que mon prénom, mon nom de famille soient séparés
du modèle d'entrée. Prénom, nom de famille. Encore une fois, rien de spécial. Je vais supprimer ou
modifier les noms d'affichage. Cependant, bien sûr,
le type de données que je valide n'est pas une adresse
e-mail pour
ces deux-là . On y va. Notre modèle de saisie
a maintenant été étendu. Prénom, LastName
et n'importe quelle LLC Tad. Nous l'avons également ajouté
au formulaire et vous verrez que
ces lignes rouges ont disparu. Non. Tout le monde
connaît donc son rôle. Et puis la dernière
chose que je vais
faire est d'étendre l'obligation d'utilisateur, mais je ne vais pas le
faire. Je voulais au moins enregistrer quelqu'un sans que
les données soient entrées. Ensuite, vous verrez à quoi cela ressemble lorsque nous obtiendrons les données du panier. Je l'ai fait. Laissez-moi contrôler le rafraîchissement à nouveau. Sautez dans mon registre et vous voyez connaître la formule
affichant plus de thèmes. Donc, si je les mets tous et que je vais dire car
Booking.com, mot de passe
Booking.com. Le mot de passe, mais
la faute est stricte. Quelqu'un pour dire P
majuscule en disant, il en dit déjà un. C'est le mot à la mode que
c'est pour vos yeux. Et j'ai utilisé ce mot de passe de
confirmation. Si je le modifie, regardez cela, le mot de passe et la
confirmation ne correspondent pas. recevons donc automatiquement
ce genre de commentaires. Si je mets quelque chose d'
invalide en tant qu'adresse e-mail et que j'essaie de m'inscrire ou quelque chose d'non valide
. Excuse-toi. Mais ici, vous
constatez que nous n'avons pas d'utilisateur. Certaines choses
échouent parce qu'elles s'attendent à certaines configurations
qui ne sont tout simplement pas là. Très bien, ce n'est pas un problème. Comme je l'ai dit, lorsque vous voyez les
erreurs, nous les avons corrigées. Cette erreur est donc due au fait que le générateur
Tolkien utilisé par le gestionnaire d'utilisateurs aurait dû être
configuré dès le démarrage. Nous ne sommes pas prêts pour ça. J'
adore ça parce que nous n'envoyons pas d'e-mail de toute façon. Je suis allé commenter,
c'est Alt aussi. Je suis sûr qu'il n'est
arrivé ici que parce que l'utilisateur a été créé
avec succès. Donc, si je regarde dans la base
de données des utilisateurs d'ASP NET, vous verrez que
l'utilisateur a été créé administrateur sur la carte Booking.com. Il ne s'agissait pas d'une adresse e-mail
non valide. Cela a donc fonctionné peu importe
ce que vous voyez ici, regardez le mot de passe. Cela ne ressemble à rien du mot de passe
que je vous ai
montré à l'écran. Sachez juste que c'est un hachage
automatique. Nous n'avons pas à nous
soucier de ce hachage. Mais si vous remarquez
la date de naissance, le prénom et le nom de
famille n'ont pas été renseignés. Date de naissance, évidente parce que
nous n'avons pas ajouté ce champ, mais FirstName et
LastName n'ont pas été renseignés même si nous avons fourni des données. Voyons donc comment nous
pouvons y remédier. Tout d'abord, je vais
inscrire le champ de date de naissance sur le formulaire. Et il n'a vraiment pas d'
importance d'où vous commencez à modifier
tant que vous obtenez toutes
les modifications faites d'ici la fin,
alors vous êtes bon d'
aller pour la date de naissance. Je définisserais simplement le
type comme étant égal à la date afin que nous puissions obtenir un sélecteur de
date dans ce champ. Puis le modèle d'entrée. Vous allez être la date
de naissance de type datetime. Je ne vais pas le
rendre obligatoire. Je pense que je devrais le
rendre nécessaire. Je vais le rendre
obligatoire parce qu'il aura une
valeur par défaut comme nous l'avons vu, que nous ne voulons pas
vraiment, n'est-ce pas ? Tout est donc
nécessaire pour que vous vous inscriviez correctement
sur ce site Web. Une fois que nous avons fait tout cela,
je souhaite que les champs supplémentaires soient stockés dans la base de données. Je suis allé
à l'endroit où il est dit : Si l'état moderne est valide
, créez un nouvel utilisateur, donnant l'e-mail du nom d'utilisateur
et l'adresse e-mail. Je peux étendre cela et voir
et cher prénom devrait être entré à partir du prénom du point de
forme. C'est quelque chose que
nous avons déjà fait auparavant. Nous nous appuyons sur ce que nous voulons. Le nom de famille est égal
au nom de famille du point en entrée. Et la date de naissance est égale à la date de
naissance du point d'
entrée. On y va. Après tout cela,
ce que je vais faire, c'est tester, mais je vois que c'
est facile ici parce que j'ai créé
la date de naissance comme date. Je m'excuse, mais cela
aurait dû être le moment. Remarquez donc que nous avons
deux changements pour moi du changement que les loups
dans la base de données. Après avoir échafaudé ce
champ dans la base de données. Et nous devons être
conscients de cela. Mais je pense que nous pouvons encore passer à travers cette opération car la base de données devrait
simplement convertir
cela chaîne quand elle l'obtient. Essayons donc encore une fois. Sautons pour nous inscrire et Tyrone Cooper change ça aujourd'hui. Pour éditer vos yeux
sont des raisons de tester. Je laisse ça et j'
utiliserai mon mot de passe pour en dire un ou simplement
utiliser quelque chose. Naissance 123, aucun problème
qui se trouvait dans mon presse-papiers. Je vais donc simplement réutiliser ça. Nous cliquons sur S'inscrire. Ok, les analyseurs doivent en
avoir au moins un. Vous voyez donc que c'est la force du
mot de passe à l'œuvre. C'est pourquoi j'ai dit p à
signer une systole ou D1, réutiliser ce clic sur Register. Ils disent qu'
ils ne correspondent pas. Laissez-moi essayer encore une fois. S'inscrire. On y va. Donc non, c'est même
me demander si je voulais voir si le mot de passe ne fait que voir si nous
pouvons avancer plus rapidement. Mais vous constatez que l'enregistrement et la connexion
ne changent toujours car nous sommes toujours
en train de développer notre application. Pas de problème. Mais au
moins, nous voyons qu' une inscription
a fonctionné. C'est un. Nous allons passer par
là sans erreur. Et si je regarde à nouveau dans la table des utilisateurs ASP
NET, je vais voir des
champs supplémentaires ont été ajoutés. Je vais maintenant
voir ma date de naissance, le premier thème
et le nom de famille. Et tout commence
à se réunir bien.
33. Configurer la page de connexion: Très bien les gars, donc
nous faisons de bons progrès. L'étape suivante consiste à
configurer la page de connexion. Je commence par
commencer par ça ou parce qu'il y a encore
des configurations. Maintenant, il doit y aller.
Pour nos trucs de connexion. Nous parlons de ce que
nous appelons l'authentification. L'autorisation signifie que vous
pouvez le faire ? L'authentification signifie que je vais
prouver que vous êtes qui vous êtes. Lorsque nous nous connectons,
c'est à ce moment que nous nous authentifions. Cependant, ce que nous pouvons faire une
fois connecté, c'est sommes-nous autorisés à le faire ? Bien que la boîte
dont nous disposons déjà de l'intergiciel utilisé pour les
autorisations soit en tête. Je vais ajouter une autre ligne qui dit utiliser l'authentification. C'est ce qui va vraiment
permettre à ce gestionnaire de connexion commencer à travailler comme
nous le voulons. Une autre chose que
nous voulons faire est dans la configuration des services et nous sommes allés à dire l'autorisation
d'ajout de services. Pour que nous sachions
que ce service est utilisé chaque fois qu'une
application démarre. Tout cela étant fait, mettons en place notre page de connexion. Maintenant, une fois de plus,
vous pouvez configurer votre page d'inscription car s'agit du formulaire d'un côté, il ne prend que quatre espaces. Et puis nous avons cette autre
div sur les côtés mixtes sur les deux
options de connexion supplémentaires, bla, bla, bla. Cela en prend six.
Cela en ferait 66. Il pourrait en faire un plus petit. Vous le personnalisez comme vous le souhaitez. À présent, vous devriez être
assez à l'aise pour connaître un tout, pour étendre le formulaire, me
tenir les boutons
personnalisés et des trucs comme ça. Je ne vais donc pas passer
trop de temps à faire ça. Toutefois, nous voulions ajouter
la page de connexion. Je peux à nouveau cliquer avec le bouton droit sur
les zones, cliquer sur Ajouter, et choisir un nouvel élément
égratigné, cliquer sur l'identité. Et puis, après avoir rassemblé toutes
les informations dont il a besoin, va nous donner
cette boîte de dialogue qui nous
permet de simuler
où se connecte. On y va. Nous
avons donc cette page de connexion. Je vais juste prendre
le logo pH aussi me connecter. Nous avons des logos. Et encore une fois, vous
avez plusieurs pages,
vous avez changé de chemin
ou le mot de passe oublié. Il peut mettre en œuvre un certain nombre
de choses et beaucoup
de code prêt à l'emploi
est assez résilient. Cependant, je me concentre simplement
sur ceux qui sont absolument nécessaires pour passer à travers ce que nous
devons traverser. Connexion et déconnexion. Encore une fois, notre contexte DB est
la classe de contexte de base de données, puis
nous allons cliquer sur Ajouter. Lorsque cette opération est terminée, elle rouvre l'échafaudage. Lisez-moi, mais nous voyons que nous avons les pages de connexion et de déconnexion. Examinons donc d'abord le logo. Pourquoi ai-je pris un pH logo ? Eh bien, tout cela
va faire, c'est dire, si l'utilisateur qui est
ici est authentifié, alors bien qu'il clique sur les
logos, que se passe-t-il avec le
logo nucléique quand il le fait ? en va de même dans le journal Manager,
puis revient à l'URL. C'est ce que fait la page de logo. La page de connexion,
c'est un formulaire simple. Donnez-moi votre e-mail, donnez-moi votre mot de passe. Et voulez-vous que je me
souvienne de vous ? Si ce n'est pas le cas, eh bien,
que ce n'est pas le cas. Laissez-moi aller de l'avant et me connecter. Il
génère automatiquement des liens pour que j'ai oublié mon mot de passe. Nous ne l'avons pas vu
dans ce fichier et nous n'
allons pas nécessairement l'implémenter. Non, c'est très bien. Mais vous avez oublié votre
mot de passe s'enregistrer en tant qu' utilisateur
est une confirmation récente
par e-mail. Donc, toutes ces choses
ainsi que la prochaine section
à droite, diriez-vous d'autres options de
connexion ? Toutes ces choses
sont venues sous cette forme. Le code de connexion derrière est donc
très similaire au registre. N'importe lequel permet aux personnes anonymes et
faibles qui ne sont pas
authentifiées d'atteindre le discours. Ensuite, nous avons des injections pour notre gestionnaire d'utilisateurs et nous nous
connectons au gestionnaire. Nous avons le même type de
format que le modèle d'entrée. Et le modèle d'entrée est
utilisé ici pour rester l'e-mail et le mot de passe
et se démarque se souvenir de moi,
En arrivant, nous chargeons simplement
la page à peu près pour que ce soit des connexions
externes simultanées. Nous n'avons pas nécessairement
besoin d'y prêter attention dans
ce cadre
de ce cours. Mais lorsque vous cliquez sur Connexion, voyons ce qui se passe
si tout est valide. Nous demandons au
gestionnaire de connexion de se connecter en utilisant le mot de passe donné à
l'adresse e-mail, le mot de passe fourni. Si la personne a dit Souvenez-vous de moi. Et si nous avons activé local, local signifie que si après
quelques tentatives échouées, ils devraient verrouiller votre comté, je suis sûr que vous l'avez
rencontré. Tout cela est intégré dans cette bibliothèque très puissante. Ce cours n'est pas
suffisant pour
passer en revue toutes les
fonctionnalités de cette bibliothèque. C'est pourquoi je me
concentre sur les
choses importantes, les
plus grandes et les plus importantes en ce moment, n'est-ce pas ? Après avoir essayé de dire s'il s'
agissait d'une connexion réussie, nous avons lu Erich,
l'URL de retour. Sinon, nous vérifions si c'est le
cas, s'il nécessite une
authentification à deux facteurs et nous déclenchons cette interaction. Nous ne l'avons pas mis en œuvre. Si l'utilisateur est verrouillé, nous les lisons que nous ne l'
avons pas implémenté. Et si tout le reste échoue, nous revenons avec
l'erreur de modèle, voyant le point de chaîne
vide comme clé. Il s'agissait d'une
tentative de connexion non valide et nous revenons au pH. S'il va aussi loin, cela signifie que
ça n'a pas fonctionné. Joli et simple. Alors,
essayons ou connectons-nous. Nous avons déjà créé
certains usages. Je suis sûr que vous et fou d'
enregistrer un certain nombre d'utilisateurs depuis qu'il a fait
fonctionner le registre et vous voyez, j'avais un signe, je ne savais pas seulement
, je viens de me déconnecter. Essayons donc cela sans connexion. Nous arrivons à la page de connexion. Super. J'ai dit que j'étais administrateur
à la voiture Booking.com. Permettez-moi de penser qu'il devrait y avoir
quatre à la fin,
mais laissez-moi essayer de me connecter. Et vous allez voir
que cela indique une connexion non valide, essayez de vérifier la base de données. Il n'a pas trouvé cette
combinaison de nom d'utilisateur ou d' e-mail et de mot de passe. Permettez-moi d'ajouter ce que je pense
que l'inconvénient des courriels était même si nos objectifs en
font un meilleur
à départager à nouveau. Mais laissez-moi essayer encore une fois. Cliquez sur Connexion. Non, je
vois autre chose. Je reçois les données de cette
carte d'erreurs nulles. Très bien, alors je suis passé
en mode débogage et j'ai relancé cette opération. Et c'est l'
erreur que je reçois, ce qui est un peu plus logique. Et je pense qu'il
s'en plaint parce que nous changeons la date de naissance, parce que nous changeons la date de naissance, la
date et l'heure, mais les
outils de base de données semblent diminuer. C'est donc une solution facile. Il suffit d'ajouter une migration, modifier le type DOB en date. Laissez-le faire la migration. migration est la colonne bruit
et alter TEN pour ce champ,
alors mettez à jour la base de données. Il voit qu'il a échoué parce que
je n'autorise pas les nulles. Rappelez-vous donc
toute cette conversation sur les types de données et les
notes. C'est très bien. Je n'exercerai pas trop de
pression ce que je vais faire
puisque nous sommes encore dans la phase expérimentale. Et vous pouvez faire appel à tous
les utilisateurs que vous avez créés. Il suffit de les trouver tous. Supprimer. Très bien, à ce stade, c'est important, c'est pourquoi ils sont là et
donc testés. Je supprime donc tous les utilisateurs
actuellement créés et je
vais juste relancer. Parfois, vous n'avez pas
le luxe de le faire. Mais nous avons déjà
examiné comment prendre des mesures lorsque vous ne pouvez pas supprimer tous les enregistrements que vous possédez déjà lorsque vous vouliez
effectuer une telle modification. De toute façon, la mise à jour
a été couronnée de succès cette fois. Laissez-moi juste Contrôler
F5 et réessayer. Je suis allé après m'inscrire d'abord et je le ferai
correctement cette fois. Donc, date de naissance. Il suffit de faire aujourd'hui admin, car
Booking.com. C'est le mot à la mode après avoir confirmé ce mot de passe
juste pour vos yeux, c'
est-à-dire le mot de passe. Ensuite, nous cliquons sur S'inscrire. Je vais
enregistrer le mot de passe et regarder ce bonjour
Admin, pas carbocation. Sachez que nous avons inclus l'annonce. Tous utilisent l'authentification et le service d'
autorisation AT au démarrage, nous commençons à voir les modifications sur l'interface
utilisateur. Laissez-moi me déconnecter et
je vais me connecter maintenant. Je vais utiliser le même administrateur,
une réservation de voiture, le même mot de passe, cliquez sur Connexion et j'ai regardé cela. Nous sommes connectés. Le logo fonctionne également. Vous voyez, nous venons de
résoudre ce problème. Nous avons donc résolu le
problème d'inscription à l'avenir. Vous ne devriez avoir
aucun de ces programmes. Encore une fois, nous savons comment
vous connecter et vous déconnecter à volonté. La prochaine chose
serait de savoir comment empêcher les utilisateurs qui ne sont pas connectés d'accéder
à ces pages ? Parce qu'à ce stade, la
connexion ne
fait aucune différence. Je peux aller n'importe où
dans l'application. Sans vous connecter. Nous devons examiner comment l'associer à nos verrouillages, l' accès à certaines parties de l'application pour les utilisateurs
non authentifiés.
34. Configurer l'autorisation de configuration: Dans cette leçon, nous
parlons de restreindre l' accès aux différentes parties de notre application pour les utilisateurs authentiques authentifiés et les utilisateurs
autorisés et vice versa. Maintenant, cela semble plus
difficile qu'il ne l'est vraiment. Et je vais vous montrer à quel point il est
facile d'y parvenir. Non, nous avons des fonctionnalités de connexion et d'
enregistrement
ouvertes, mais nous devons être en mesure
de gérer ces pages. Donc, n'importe qui devrait pouvoir accéder confortablement
à la page d'accueil. Mais s'ils cliquent sur des voitures, ils devraient être obligés de se connecter avant de pouvoir
regarder les voitures et
facilement faire. Et c'est très facile. Permettez-moi de fermer
tous les onglets qui
ne sont pas importants à ce stade
et de réduire quoi que ce soit. Si je ne veux pas que vous puissiez accéder
à la liste des voitures. Tout ce que j'ai à faire, c'est au-dessus
du code de page des voitures. Ajoutez un attribut indiquant autoriser l'
instruction use manquante. C'est ça. Je vous ai dit que ce serait simple. Jetons donc un coup d'œil
à la façon dont cela fonctionne. C'est donc sur la page d'index
des voitures que j'ai autorisées, ce qui signifie que je ne
devrais pas
pouvoir , dans un état non authentifié, cliquer sur les voitures et voir
la liste des cartes. Regardez ce qui
se passe quand je clique voitures va faire, accord, d'accord, c'
est anticlimactique, mais vous voyez que ça ne
se comporte pas correctement. Il essaie d'
accéder à l'écran de connexion. Je vais maintenant revenir
à l'application, et je soupçonne fortement
que je vais
devoir modifier ma configuration. Une fois encore. C'est
encore ça, ce va-et-vient. C'est bien parce que lorsque vous
voyez ce genre de flèches, cela vous aide à déterminer où vous devez aller pour
résoudre ces problèmes. Lorsque nous avons ajouté des services, oubliez pas que
nous avons d'abord ajouté le noyau d'identité, puis nous avons vu que certains
éléments ne
sont pas prêts à l'emploi, c'est
pourquoi nous le transformons en identité. ces choses, ça n'a pas bien
fonctionné. Pors de la boîte a commencé à travailler nulle part en voyant
une autre chose. Le problème avec la flèche que nous venons voir est qu'elle
recherche la page de connexion à un endroit donné
qu'elle n'existe pas. C'est parce que
les identités vont juste dire regarder à cet endroit. Cependant, je
voudrais qu'il regarde dans l'emplacement par défaut en
fonction de l'échafaudage. Je ne veux donc pas faire beaucoup
de configurations et
modifier le flux normal
de l'application. Pour cette raison, je peux, au lieu d'utiliser Identity
Core, je peux utiliser l'identité par défaut. Si vous regardez celui-ci,
il est dit qu'il ajoute un sens des services d'identité
communs
à l'application, y compris notre interface utilisateur par défaut, où nous
aurions échafaudé nos affaires. C'est l'emplacement par défaut. Fournisseurs de jetons. N'oubliez pas que lorsque
nous enregistrons notre bateau, tout
le fournisseur de jetons et qu'il marche pour une tasse de thé ou un jouet, il manque et nous
devons l'inclure. Il est automatiquement inclus dans
les options par défaut et configure l'authentification
pour utiliser les cookies. C'est ce que je vais
faire. Ajoutez une identité par défaut. Non, je reçois cette erreur
parce que j'avais une entité par défaut similaire
aux
mots de base d'identité ne prend que l'utilisateur, ce qui signifie que je dois venir
manuellement ici et voir ajouter des règles. Une fois encore. Ajoutez des règles, puis nous
lui donnons la règle d'identité. Permettez-moi de le mettre entre parenthèses. Là, nous allons de l'avant,
réglez l'entité, fermez. Non, nous utilisons la
bibliothèque par défaut pour l'identité. Et celui-ci, comme je l'ai dit, va inclure
certaines valeurs par défaut, Alt hors de la boîte que d'autres
choses n'ont pas nécessairement fait. Prenons un autre coup de couteau à cette expérience, c'est que nous avons ajouté autorisé
le discours de la voiture. Je ne devrais pas pouvoir
y naviguer sans m'être
connecté auparavant. Donc, si je clique sur les voitures,
regardez
ça, il me
redirige automatiquement vers la page de connexion. Donc, comme nous n'avions pas
la valeur par défaut, il ne cherchait pas dans
l'emplacement par défaut
du dossier d'identité pour
trouver les icônes et se connecter. Donc, cela a effectivement
omis cette partie, c'est
pourquoi nous avons eu cette page. Je ne vous montrerai jamais quelque chose ou encoderai une erreur sans expliquer pourquoi nous
l'avons obtenu et comment nous le corrigeons. Maintenant que nous sommes
sur la page de connexion, assurez-vous que
notre fonctionnalité de connexion fonctionne
toujours. Oui, c'est le cas. Voici notre bonjour et non, nous ne pouvons pas voir la page, donc nulle part authentifié et nous sommes autorisés
à voir la page. Il serait plutôt fastidieux
de dire, Ok, eh bien, après le verrouillage pour modifier et les détails et
la suppression, parce qu'à ce stade, si je voulais modifier une voiture et je me suis souvenu de l'URL
pour éditer notre voiture. Voyons voir, je ne suis pas
autorisé et je vais en voiture et non autorisé. Qu'est-ce que je me tenais au-dessus de l'épaule de
quelqu'un
pendant que c'était le cas. Editer notre voiture et
je me souviens de l'URL. Je peux en fait simplement
entrer cette URL et contourner toute
l'autorisation pour toute
l'autorisation pour modifier la voiture, ce qui est faux. À ce moment-là, je
devrais ajouter l'
attribut autorisation sur chaque page que je veux
les laisser configurer, pour créer, je devrais
faire deux autres détails. Editez que
chacun d'entre eux, ce qui n'est pas nécessairement, je veux dire que cela fonctionne et cela peut être pratique dans une
petite application. Mais pour moi, ça va
se fatiguer facilement. Et il est facile pour
quelqu'un d'oublier de placer ce code
au-dessus du code pH. Ce que nous pouvons faire,
c'est le faire au niveau mondial. Dans notre Startup Weekend, ajoutez ce code ou
ajoutez une zone de pages Razor. Vous pouvez voir varier le
code entre la façon dont il le fait dans les pages Razor et si vous avez déjà
eu à le faire dans MVC, et comme vous le voyez dans
tout un tas, vous savez, il y a tellement de façons d'
accomplir la même chose. . Il suffit de trouver celui
qui vous convient et qui convient le mieux à votre contexte. Dans cette situation, il
suffit de voir
que les artères sont des pages. Commencez à appliquer cette même option. S'opposer à accepter. Je l'appelle juste au
lieu d'options. Donc toutes les expressions lambda. Et au lieu de cela, je
dis toutes les conventions de
points, dossier autorisé par point, slush. Il y a un certain nombre de
choses que vous pouvez autoriser. Autorisez la zone dans
laquelle vous pouvez autoriser une journée complète, autoriser une page spécifique. Si vous avez peut-être une
page spécifique dont vous voulez avoir des règles spécifiques est différente des autres PHs ou un
dossier spécifique à lire par différents, il peut les ajouter tous. On les appelle des conventions. Norm vient d'ajouter une
convention globale à n'importe quoi après une barre oblique et de voir que vous êtes
censé être autorisé. Cela va donc
automatiquement s'exécuter en gros ajouter ce filtre autorisé sur chaque page
de mon application. La seule façon de le contourner est ajouter ou
d'autoriser l'anonymat. Je vais donc
vous le montrer maintenant. Donc, si je retire ce qui est
autorisé de la page des voitures et d'un
Control F5, laissez-le fonctionner. Vous allez voir que j' aurais
dû atterrir
sur la page d'accueil. Il faut que je me connecte
si j'essaie d'aller au mixage, il veut que je le signe où que je vais,
je dois me connecter. Mais si je vais m'inscrire, cela me permet de voir la page de
redistribution. C'est parce que le
filtre appelé faible anonyme est au-dessus de la
prédiction du registre, n'est-ce pas ? Donc, si je saute et que je
regarde déjà en magasin, vous verrez un faible
anonyme au-dessus. Donc, si j'ajoute cela à page d'index régulière,
voyons voir. Rappelez-vous que nous avons commencé avec notre page d'index
où nous avions tous nos merveilleux devis issus
d'une classe de div web plus basique. Si je voulais que l'utilisateur se rende à Londres, au moins la page d'accueil
sans beurre. Mais partout ailleurs,
ils ont besoin de se connecter, alors je n'ai qu'à dire autoriser l'anonymat. Donc, en faisant cela, si je me rafraîchis et que je vais
sur la page d'accueil,
la page d'accueil s'affiche simplement
parce que j'ai dit bonjour Anonymous. Cependant, si j'essayais d'aller en
voiture, je ne peux pas y arriver. Si j'ai essayé de taper
une URL directe pour les voitures, modifiez la barre oblique
avec l'ID 14. Je dois me connecter
peu importe ce que je fais,
je ne peux pas aller nulle part
non plus, non plus ? Pas d'intimité. Il veut que je me
connecte pour y remédier. J'ai juste besoin d'aller au-delà vie privée et d'autoriser un accès
anonyme. Soudain,
je clique sur Confidentialité. Cela
m'amènera à la page de confidentialité car
les personnes anonymes peuvent la voir. Si je me connecte et que j'
essaie à nouveau, alors ok, pages d'accueil, les bonnes voitures et tout le reste
sont disponibles pour consultation. C'est donc ainsi que nous pouvons verrouiller ou appliquer et restreindre l' accès
indésirable aux zones
sensibles.
35. Ajouter des l'autorisation: Très bien les gars, donc je pense que
nous avons fait du bon travail sécuriser notre application
jusqu'à présent, nous avons configuré avec succès l'enregistrement
et la connexion, et nous pouvons faire beaucoup
plus. Nous pourrions entrer dans des rôles, nous pourrions restreindre
les utilisateurs en fonction de certaines
politiques et revendications. Il y a
tellement de choses que nous pourrions faire. Mais malheureusement, je ne veux pas vous
submerger avec
toutes les informations et tous les scénarios, etc. Il est préférable d'absorber autant de NO et de
l'expérimenter. Et ensuite, vous pouvez étendre
vos connaissances selon vos besoins. Pour l'instant, nous pouvons simplement passer revue rapidement
ce que nous avons mis en œuvre. En commençant par notre utilisateur d'identité, la classe d'utilisateurs de l'application. Lorsque nous avons mis en place
notre bibliothèque d'identités. Dans ce projet,
nous avons dû hériter héritage
cheesy
pour le contexte DB
du contexte DB d'identité. Ensuite, nous l'avons configuré
pour qu'il hérite en fonction du contexte de l'utilisateur de l'application. L'utilisateur de l'application était
notre classe personnalisée que nous rencontrons pour hériter
de l'utilisateur d'identité, où nous avons ajouté
des champs supplémentaires qui étendraient la
table des utilisateurs dans la base de données. Jusqu'à présent, nous n'avons pas
écrit de code personnalisé pour gérer la création de l'utilisateur ou hachage du mot de passe ou
même des capacités de connexion. Toutes ces choses nous ont été
données dès la fin de la boîte. Et la largeur, la marge de manœuvre
que nous pourrions
les modifier hors de la route. Donc, après avoir fait tout cela, nous avons échafaudé les changements
avec quelques migrations, quelques migrations
sur le terrain
étaient des changements, mais nous avons traversé tout cela. Ensuite, nous avons vérifié que nous avons configuré l'identité dans
notre application Web, que nous avons également
traversé des cycles d' identité par rapport au noyau d'identité par
rapport à l'identité par défaut AD, qui est celui que
nous avons dit que Louis, parce qu'il était livré avec les bibliothèques les plus préemballées basées sur ce que nous devons faire. Après avoir fait tout cela,
nous sommes allés de l'avant et avons créé
nos interfaces utilisateur, modifié certaines d'entre elles. Pour l'enregistrement. Nous avions les commentaires, les
réflexions, tout le code car il n'était pas nécessairement applicable
à notre portée actuelle. Nous supprimons donc une partie de ce code. Nous mettons en place les fonctions et les pages de connexion et de
déconnexion. Nous avons également obtenu une connexion
partielle de l'échafaudage que nous avons
ajouté à notre page de mise en page, ce qui nous donne accès aux liens
de connexion et de connexion. Maintenant que tout cela est fait, puces
Zoom sont de bons changements. Et voyez que nous avons ajouté une connexion et des fonctionnalités
à notre application. Nos coéquipiers savent
exactement à quoi s'attendre lorsqu'ils obtiennent
le dernier code. Je me suis donc connecté et j'ai
ajouté des fonctionnalités,
puis nous avons tout
validé et coulé. C'est tout pour cette section.