Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

Modèles et validation dans ASP.NET MVC

Dans l'infrastructure ASP.NET MVC, le modèle correspond à la partie de l'application qui est responsable de l'application de base ou de la logique métier. Les objets de modèle accèdent généralement aux données à partir d'un magasin persistant, tel que SQL Server, et exécutent la logique métier sur ces données. Les modèles sont spécifiques à l'application et, par conséquent, l'infrastructure ASP.NET MVC ne restreint pas les genres d'objets de modèle que vous pouvez générer. Par exemple, vous pouvez utiliser des objets DataSet ou DataReader ADO.NET, ou bien un ensemble personnalisé d'objets de domaine. Vous pouvez également employer une combinaison de types d'objets pour exploiter des données.

Le modèle n'est pas une classe ou une interface spécifique. Une classe fait partie du modèle non pas parce qu'elle implémente une certaine interface ou qu'elle dérive d'une certaine classe de base. Elle fait partie du modèle en raison du rôle qu'elle joue dans l'application ASP.NET MVC et de l'emplacement qu'elle occupe dans la structure de dossiers de l'application. Une classe de modèle d'une application ASP.NET MVC ne gère pas directement les entrées provenant du navigateur et ne génère pas de sortie HTML vers ce dernier.

Les objets de modèle sont les parties de l'application qui implémentent la logique de domaine, également appelée logique métier. La logique de domaine gère les données passées entre la base de données et l'interface utilisateur. Par exemple, dans un système d'inventaire, le modèle conserve une trace des articles stockés et de la logique permettant de déterminer si un article est en stock. En outre, le modèle correspond à la partie de l'application qui met à jour la base de données lorsqu'un élément est vendu et expédié hors de l'entrepôt. Souvent, il permet également de stocker et de récupérer son état dans une base de données.

Il est recommandé de placer les classes de modèle dans le dossier Models qui est fourni par Visual Studio dans le modèle d'application ASP.NET MVC. Toutefois, il est également courant de placer les classes de modèle dans un assembly séparé pour pouvoir les réutiliser dans différentes applications.

L'utilisation des classes de modèle à partir d'un contrôleur consiste généralement à instancier les classes de modèle dans des actions de contrôleur, à appeler les méthodes des objets de modèle et à extraire les données appropriées de ces objets pour les afficher dans des vues. Cette approche est recommandée pour l'implémentation des actions. Elle maintient par ailleurs une séparation entre les éléments logiques de l'application, ce qui permet de tester plus facilement la logique de l'application sans avoir à passer par l'interface utilisateur.

L'exemple suivant présente une classe de modèle simple représentant une personne.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcSimpleModelBinding.Models
{
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Street { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public int Zipcode { get; set; }
    }
}


Dans MVC, un classeur de modèles offre un moyen simple pour mapper des valeurs de formulaire publiées à un type .NET Framework et passer le type à une méthode d'action en tant que paramètre. Les classeurs vous permettent également de contrôler la désérialisation des types passés aux méthodes d'action. Les classeurs de modèles sont semblables à des convertisseurs de type car ils peuvent convertir des requêtes HTTP en objets passés à une méthode d'action. Toutefois, ils incluent également des informations relatives au contexte de contrôleur actuel.

Un classeur de modèles vous permet d'associer une classe implémentant l'interface IModelBinder à l'aide d'un paramètre de méthode d'action ou d'un type. L'interface IModelBinder contient une méthode GetValue que l'infrastructure appelle pour récupérer la valeur d'un paramètre ou d'un type spécifié. La classe DefaultModelBinder fonctionne avec la plupart des types .NET Framework, y compris les tableaux et les objets IList, ICollection et IDictionary.

Exemple de liaison de modèle

L'exemple suivant indique comment implémenter une liaison de modèle simple. Le modèle utilisé dans cet exemple est la classe Person qui a été définie dans un exemple précédent. Cet exemple inclut une classe PersonController, ainsi que des vues Index, Create et Details. La classe PersonController crée une liste pour le stockage des objets Person. La vue Index affiche les propriétés Id et Name de chaque objet Person de la liste. La vue Create permet à l'utilisateur d'entrer les informations relatives à une personne. La vue Details affiche toutes les informations concernant la personne sélectionnée.

L'exemple suivant présente la classe PersonController :


public class PersonController : Controller
{
    static List<Person> people = new List<Person>();

    //
    // GET: /Person/
    public ActionResult Index()
    {
        return View(people);
    }

    //
    // GET: /Person/Details/5
    public ActionResult Details(Person person)
    {
        return View(person);
    }

    //
    // GET: /Person/Create
    public ActionResult Create()
    {
        return View();
    } 

    //
    // POST: /Person/Create
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(Person person)
    {
        if (!ModelState.IsValid)
        {
            return View("Create", person);
        }

        people.Add(person);

        return RedirectToAction("Index");
    }
}


L'exemple suivant présente la vue Index :


<h2>Index</h2>

<table>
    <tr>
        <th></th>
        <th>
            Id
        </th>
        <th>
            Name
        </th>
    </tr>

<% foreach (var person in Model) { %>

    <tr>
        <td>
            <%= Html.ActionLink("Details", "Details", person )%>
        </td>
        <td>
            <%= Html.Encode(person.Id) %>
        </td>
        <td>
            <%= Html.Encode(person.Name) %>
        </td>
    </tr>

<% } %>

</table>

<p>
    <%= Html.ActionLink("Create New", "Create") %>
</p>


L'exemple suivant présente la vue Create :


<h2>Create</h2>

<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

<% using (Html.BeginForm()) {%>

    <fieldset>
        <legend>Fields</legend>
        <p>
            <label for="Id">Id:</label>
            <%= Html.TextBox("Id") %>
            <%= Html.ValidationMessage("Id", "*") %>
        </p>
        <p>
            <label for="Name">Name:</label>
            <%= Html.TextBox("Name") %>
            <%= Html.ValidationMessage("Name", "*") %>
        </p>
        <p>
            <label for="Age">Age:</label>
            <%= Html.TextBox("Age") %>
            <%= Html.ValidationMessage("Age", "*") %>
        </p>
        <p>
            <label for="Street">Street:</label>
            <%= Html.TextBox("Street") %>
            <%= Html.ValidationMessage("Street", "*") %>
        </p>
        <p>
            <label for="City">City:</label>
            <%= Html.TextBox("City") %>
            <%= Html.ValidationMessage("City", "*") %>
        </p>
        <p>
            <label for="State">State:</label>
            <%= Html.TextBox("State") %>
            <%= Html.ValidationMessage("State", "*") %>
        </p>
        <p>
            <label for="Zipcode">Zipcode:</label>
            <%= Html.TextBox("Zipcode") %>
            <%= Html.ValidationMessage("Zipcode", "*") %>
        </p>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

<% } %>

<div>
    <%=Html.ActionLink("Back to List", "Index") %>
</div>


L'exemple suivant présente la vue Details :


<h2>Details</h2>

<fieldset>
    <legend>Fields</legend>
    <p>
        Id:
        <%= Html.Encode(Model.Id) %>
    </p>
    <p>
        Name:
        <%= Html.Encode(Model.Name) %>
    </p>
    <p>
        Age:
        <%= Html.Encode(Model.Age) %>
    </p>
    <p>
        Street:
        <%= Html.Encode(Model.Street) %>
    </p>
    <p>
        City:
        <%= Html.Encode(Model.City) %>
    </p>
    <p>
        State:
        <%= Html.Encode(Model.State) %>
    </p>
    <p>
        Zipcode:
        <%= Html.Encode(Model.Zipcode) %>
    </p>
</fieldset>
<p>
    <%=Html.ActionLink("Back to List", "Index") %>
</p>


Autres ressources

Ajouts de la communauté

AJOUTER
Afficher: