Développement Web de base avec ASP. NETTE Core 5 | Trevoir Williams | Skillshare
Recherche

Vitesse de lecture


1.0x


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

Développement Web de base avec ASP. NETTE Core 5

teacher avatar Trevoir Williams, Jamaican Software Engineer

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction

      1:01

    • 2.

      Configuration du projet de base ASP.NET

      3:35

    • 3.

      Projet de pages du tour de rasoir

      18:57

    • 4.

      Comprendre la syntaxe des rasoirs

      12:19

    • 5.

      Message des paramètres

      7:51

    • 6.

      Ajout de un cadre d'entités

      12:03

    • 7.

      Ajouter une base de données au projet

      14:32

    • 8.

      Cours de bases de données d'échafaudage

      13:05

    • 9.

      Ajouter un projet à GitHub

      9:24

    • 10.

      Ajouter une page de rasoir

      21:40

    • 11.

      Ajouter une page de rasoir de mise à jour

      23:53

    • 12.

      Ajouter des détails Page de rasoir

      5:30

    • 13.

      Ajouter Supprimer la page Razor

      22:30

    • 14.

      Utilisation de vues partielles et d'améliorations de l'interface utilisateur

      33:11

    • 15.

      Ajouter des modifications à GitHub

      1:26

    • 16.

      Gérez les modifications de bases de données à l'aide du cadre d'entités

      22:15

    • 17.

      Améliorations de formulaires - Partie 1

      24:20

    • 18.

      Améliorations de formulaires - Partie 2

      12:19

    • 19.

      Améliorer les formulaires et les validations de collecte de données - Partie 1

      26:35

    • 20.

      Améliorer les formulaires et les validations de collecte de données - Partie 2

      18:47

    • 21.

      Ajouter des listes déroulantes en cascade avec JQuery - Partie 1

      24:03

    • 22.

      Ajouter des listes déroulantes en cascade avec JQuery - Partie 2

      16:33

    • 23.

      Fixer des affichages d'étiquettes de données

      6:42

    • 24.

      Interface utilisateur de nettoyage

      31:15

    • 25.

      Configurer des dépôts d'accès aux données

      25:57

    • 26.

      Ajouter un premier code de dépôt

      16:46

    • 27.

      Pages de refactorisation

      14:20

    • 28.

      Repositories complets

      21:24

    • 29.

      Conclusion de la section de dépôt

      9:46

    • 30.

      Configuration de l'authentification utilisateur

      10:54

    • 31.

      Prolonger la table des utilisateurs

      4:53

    • 32.

      Page d'enregistrement de la configuration

      20:25

    • 33.

      Page de connexion de configuration

      9:45

    • 34.

      Autorisation de configuration

      9:34

    • 35.

      Ajouter une autorisation

      3:09

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

92

apprenants

--

projet

À propos de ce cours

Dans ce cours, vous apprendrez à développer une application en utilisant ASP.NET Core 5.

Ce cours s'appuiera sur votre base de la programmation HTML, CSS, JavaScript et C #.

À la fin de ce cours, vous saurez comment :

  • Construire une application Web avec ASP.NET Core
  • Sécuriser une application Web avec une connexion et une inscription
  • Apprenez des concepts avancés comme l'injection de dépendance et les principes SOLIDES dans la programmation
  • Connectez votre application Web à une base de données SQL Server
  • Utilisez Bootstrap pour embellir votre site web.
  • Utilisez efficacement JavaScript et jQuery sur votre site Web.
  • Apprendre à utiliser GitHub pour la gestion de la commande de sources

Venez avec moi dans ce voyage et apprenez à construire une application Web dynamique, basée sur les données et SOLIDE.

Rencontrez votre enseignant·e

Teacher Profile Image

Trevoir Williams

Jamaican Software Engineer

Enseignant·e

Compétences associées

Développement Développement Web
Level: All Levels

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

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.