Partager via


Accès aux données de votre modèle à partir d’un contrôleur (C#)

par Rick Anderson

Remarque

Une version mise à jour de ce didacticiel est disponible ici qui utilise ASP.NET MVC 5 et Visual Studio 2013. Il est plus sécurisé, beaucoup plus simple à suivre et montre plus de fonctionnalités.

Ce tutoriel vous apprend les principes de base de la création d’une application web MVC ASP.NET à l’aide de Microsoft Visual Web Developer 2010 Express Service Pack 1, qui est une version gratuite de Microsoft Visual Studio. Avant de commencer, vérifiez que vous avez installé les conditions préalables répertoriées ci-dessous. Vous pouvez les installer en cliquant sur le lien suivant : Web Platform Installer. Vous pouvez également installer individuellement les prérequis à l’aide des liens suivants :

Si vous utilisez Visual Studio 2010 au lieu de Visual Web Developer 2010, installez les prérequis en cliquant sur le lien suivant : Conditions préalables pour Visual Studio 2010.

Un projet Visual Web Developer avec du code source C# est disponible pour accompagner cette rubrique. Téléchargez la version C#. Si vous préférez Visual Basic, basculez vers la version Visual Basic de ce didacticiel.

Dans cette section, vous allez créer une classe et écrire du MoviesController code qui récupère les données de film et les affiche dans le navigateur à l’aide d’un modèle d’affichage. Veillez à créer votre application avant de continuer.

Cliquez avec le bouton droit sur le dossier Contrôleurs et créez un MoviesController contrôleur. Sélectionnez les options suivantes :

  • Nom du contrôleur : MoviesController. (Il s’agit de la valeur par défaut.)
  • Modèle : contrôleur avec des actions et des vues en lecture/écriture, à l’aide d’Entity Framework.
  • Classe de modèle : Movie (MvcMovie.Models).
  • Classe de contexte de données : MovieDBContext (MvcMovie.Models).
  • Vues : Razor (CSHTML). (Valeur par défaut.)

AddScaffoldedMovieController

Cliquez sur Ajouter. Visual Web Developer crée les fichiers et dossiers suivants :

  • Fichier MoviesController.cs dans le dossier Controllers du projet.
  • Dossier Films dans le dossier Views du projet.
  • Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml et Index.cshtml dans le nouveau dossier Views\Movies .

NewMovieControllerScreenShot

Le mécanisme de génération automatique de modèles MVC 3 ASP.NET a créé automatiquement les méthodes et vues CRUD (créer, lire, mettre à jour et supprimer) pour vous. Vous disposez maintenant d’une application web entièrement fonctionnelle qui vous permet de créer, de lister, de modifier et de supprimer des entrées de film.

Exécutez l’application et accédez au Movies contrôleur en ajoutant /Movies à l’URL dans la barre d’adresse de votre navigateur. Étant donné que l’application s’appuie sur le routage par défaut (défini dans le fichier Global.asax ), la requête http://localhost:xxxxx/Movies du navigateur est acheminée vers la méthode d’action par défaut Index du Movies contrôleur. En d’autres termes, la demande http://localhost:xxxxx/Movies de navigateur est effectivement la même que la demande http://localhost:xxxxx/Movies/Indexde navigateur. Le résultat est une liste vide de films, car vous n’avez pas encore ajouté.

Capture d’écran montrant la fenêtre du navigateur de l’application vidéo M V C dans la page Liste des films.

Création d’un film

Sélectionnez le lien Créer nouveau. Entrez des détails sur un film, puis cliquez sur le bouton Créer .

Capture d’écran montrant la fenêtre du navigateur De l’application vidéo M V C dans la page Créer.

Le fait de cliquer sur le bouton Créer entraîne la publication du formulaire sur le serveur, où les informations sur le film sont enregistrées dans la base de données. Vous êtes ensuite redirigé vers l’URL /Movies , où vous pouvez voir le film nouvellement créé dans la liste.

IndexWhenHarryMet

Créez deux ou trois autres entrées. Essayez les liens Edit, Details et Delete, qui sont tous opérationnels.

Examen du code généré

Ouvrez le fichier Controllers\MoviesController.cs et examinez la méthode générée Index . Une partie du contrôleur de film avec la Index méthode est illustrée ci-dessous.

public class MoviesController : Controller
{
    private MovieDBContext db = new MovieDBContext();

    //
    // GET: /Movies/

    public ViewResult Index()
    {
        return View(db.Movies.ToList());
    }

La ligne suivante de la MoviesController classe instancie un contexte de base de données de films, comme décrit précédemment. Vous pouvez utiliser le contexte de base de données vidéo pour interroger, modifier et supprimer des films.

private MovieDBContext db = new MovieDBContext();

Une demande adressée au Movies contrôleur retourne toutes les entrées de la table de la Movies base de données de films, puis transmet les résultats à la Index vue.

Modèles fortement typés et mot @model clé

Plus haut dans ce tutoriel, vous avez vu comment un contrôleur peut transmettre des données ou des objets à un modèle d’affichage à l’aide de l’objet ViewBag . Il ViewBag s’agit d’un objet dynamique qui fournit un moyen pratique de transmettre des informations à une vue.

ASP.NET MVC permet également de transmettre des données ou des objets fortement typés à un modèle d’affichage. Cette approche fortement typée permet de mieux compiler le contrôle de votre code et d’enrichir IntelliSense dans l’éditeur Visual Web Developer. Nous utilisons cette approche avec la classe et le MoviesController modèle de vue Index.cshtml.

Notez comment le code crée un List objet lorsqu’il appelle la View méthode d’assistance dans la méthode d’action Index . Le code passe ensuite cette Movies liste du contrôleur à la vue :

public ViewResult Index()
{
    return View(db.Movies.ToList());
}

En incluant une @model instruction en haut du fichier de modèle de vue, vous pouvez spécifier le type d’objet attendu par la vue. Lorsque vous avez créé le contrôleur de film, Visual Web Developer incluait automatiquement l’instruction suivante @model en haut du fichier Index.cshtml :

@model IEnumerable<MvcMovie.Models.Movie>

Cette @model directive vous permet d’accéder à la liste des films que le contrôleur a transmis à la vue à l’aide d’un Model objet fortement typé. Par exemple, dans le modèle Index.cshtml , le code effectue une boucle dans les films en effectuant une foreach instruction sur l’objet fortement typé Model :

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ReleaseDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Genre)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Price)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}

Étant donné que l’objet Model est fortement typé (en tant qu’objet IEnumerable<Movie> ), chaque item objet de la boucle est typé comme Movie. Entre autres avantages, cela signifie que vous obtenez la vérification au moment de la compilation du code et la prise en charge complète d’IntelliSense dans l’éditeur de code :

ModelIntelliSense

Utilisation de SQL Server Compact

Entity Framework Code First a détecté que la base de données chaîne de connexion fournie pointait vers une Movies base de données qui n’existait pas encore, donc Code First a créé la base de données automatiquement. Vous pouvez vérifier qu’elle a été créée en recherchant dans le dossier App_Data . Si vous ne voyez pas le fichier Movies.sdf, cliquez sur le bouton Afficher tous les fichiers dans la barre d’outils Explorateur de solutions, cliquez sur le bouton Actualiser, puis développez le dossier App_Data.

SDF_in_SolnExp

Double-cliquez sur Movies.sdf pour ouvrir l’Explorateur de serveurs. Développez ensuite le dossier Tables pour voir les tables qui ont été créées dans la base de données.

Remarque

Si vous recevez une erreur lorsque vous double-cliquez sur Movies.sdf, vérifiez que vous avez installé SQL Server Compact 4.0(runtime + prise en charge des outils). (Pour obtenir des liens vers le logiciel, consultez la liste des prérequis dans la partie 1 de cette série de tutoriels.) Si vous installez la version maintenant, vous devez fermer et rouvrir Visual Web Developer.

DB_explorer

Il existe deux tables, une pour l’ensemble Movie d’entités, puis la EdmMetadata table. La EdmMetadata table est utilisée par Entity Framework pour déterminer quand le modèle et la base de données ne sont pas synchronisés.

Cliquez avec le bouton droit sur la Movies table et sélectionnez Afficher les données de table pour afficher les données que vous avez créées.

MoviesTable

Cliquez avec le bouton droit sur la table, puis sélectionnez Modifier le Movies schéma de table.

EditTableSchema

TableSchemaSM

Notez comment le schéma de la Movies table est mappé à la Movie classe que vous avez créée précédemment. Entity Framework Code First a créé automatiquement ce schéma pour vous en fonction de votre Movie classe.

Lorsque vous avez terminé, fermez la connexion. (Si vous ne fermez pas la connexion, vous risquez d’obtenir une erreur la prochaine fois que vous exécutez le projet).

CloseConnection

Vous disposez maintenant de la base de données et d’une page de référencement simple pour afficher du contenu à partir de celui-ci. Dans le tutoriel suivant, nous allons examiner le reste du code généré et ajouter une méthode et une SearchIndex SearchIndex vue qui vous permet de rechercher des films dans cette base de données.