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

Contrôleurs et méthodes d'action dans les applications ASP.NET MVC

L'infrastructure ASP.NET MVC mappe des URL à des classes appelées contrôleurs. Les contrôleurs traitent les requêtes entrantes, gèrent les entrées et interactions de l'utilisateur, et exécutent la logique d'application appropriée. Une classe de contrôleur appelle généralement un composant de vue séparé afin de générer le balisage HTML pour la demande.

La classe de base de tous les contrôleurs est ControllerBase ; elle fournit le mécanisme de gestion MVC général. La classe Controller hérite de ControllerBase et correspond à l'implémentation par défaut d'un contrôleur. La classe Controller prend en charge les étapes de traitement suivantes :

  • Recherche de la méthode d'action à appeler et confirmation du fait qu'elle peut être appelée.

  • Obtention des valeurs à utiliser en tant qu'arguments de la méthode d'action.

  • Gestion de toutes les erreurs pouvant survenir pendant l'exécution de la méthode d'action.

  • Mise à disposition de la classe WebFormViewEngine par défaut pour le rendu des types de pages ASP.NET (vues).

    RemarqueRemarque :

    Pour sécuriser l'accès aux contrôleurs et aux méthodes d'action, vous pouvez utiliser la classe AuthorizeAttribute.

Toutes les classes de contrôleur doivent être nommées à l'aide du suffixe "Controller". L'exemple suivant présente l'exemple de classe de contrôleur nommé HomeController. Cette classe de contrôleur contient des méthodes d'action qui restituent les pages de vue.


[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}


Dans les applications ASP.NET qui n'utilisent pas l'infrastructure MVC, l'intervention de l'utilisateur est organisée autour des pages ; elle s'articule autour du déclenchement et de la gestion d'événements à partir de ces pages et des contrôles qu'elles contiennent. Par opposition, dans les applications ASP.NET MVC, l'intervention de l'utilisateur est organisée autour des contrôleurs et des méthodes d'action. Le contrôleur définit des méthodes d'action. Les contrôleurs peuvent inclure autant de méthodes d'action que nécessaire.

Il existe en général un mappage un-à-un entre les méthodes d'action et les interventions de l'utilisateur. Les interventions de l'utilisateur consistent notamment à entrer une URL dans le navigateur, à cliquer sur un lien et à envoyer un formulaire. Chacun de ces interventions entraîne l'envoi d'une demande au serveur. Dans chaque cas, l'URL de la demande inclut des informations que l'infrastructure MVC utilise pour appeler une méthode d'action.

Lorsqu'un utilisateur entre une URL dans le navigateur, l'application MVC utilise les règles de routage définies dans le fichier Global.asax pour analyser l'URL et déterminer le chemin d'accès du contrôleur. Le contrôleur détermine ensuite la méthode d'action appropriée pour gérer la demande. Par défaut, l'URL d'une demande est traitée comme un sous-chemin d'accès qui inclut le nom du contrôleur, suivi du nom de l'action. Par exemple, si un utilisateur entre l'URL http://contoso.com/MyWebSite/Products/Categories, le sous-chemin d'accès est /Products/Categories. La règle de routage par défaut traite « Products » en tant que préfixe du contrôleur, qui doit se terminer par « Controller » (par exemple ProductsController). Il traite « Categories » comme nom de l'action. Par conséquent, la règle de routage appelle la méthode Categories du contrôleur Products pour traiter la demande. Si l'URL se termine par /Products/Detail/5, la règle de routage par défaut traite "Detail" en tant que nom de l'action, et la méthode Detail du contrôleur Products est appelée pour traiter la demande. Par défaut, la valeur "5" de l'URL sera passée à la méthode Detail comme paramètre.

L'exemple suivant présente une classe de contrôleur comportant la méthode d'action HelloWorld.

public class MyController : Controller
{
    public ActionResult HelloWorld()
    {
        ViewData["Message"] = "Hello World!";
        return View();
    }
}

La plupart des méthodes d'action retournent une instance d'une classe qui dérive de ActionResult. ActionResult est la classe de base de tous les résultats d'action. Toutefois, il existe différents types de résultats d'action, selon la tâche exécutée par la méthode d'action. Par exemple, l'action la plus courante consiste à appeler la méthode View. La méthode View retourne une instance de la classe ViewResult, qui est dérivée de la classe ActionResult.

Vous pouvez créer des méthodes d'action qui retournent un objet de n'importe quel type, tel qu'une chaîne, un entier ou une valeur booléenne. Ces types de retours sont inclus dans un wrapper dans un type ActionResult approprié avant d'être restitués dans le flux de réponse.

Le tableau suivant présente les types de résultats d'action intégrés et les méthodes d'assistance d'action qui les retournent.

Résultat d'action

Méthode d'assistance

Description

ViewResult

View

Restitue une vue sous forme de page Web.

PartialViewResult

PartialView

Restitue une vue partielle, qui définit une section d'une vue pouvant être restituée dans une autre vue.

RedirectResult

Redirect

Effectue une redirection vers une autre méthode d'action à l'aide de son URL.

RedirectToRouteResult

RedirectToAction

RedirectToRoute

Effectue une redirection vers une autre méthode d'action.

ContentResult

Content

Retourne un type de contenu défini par l'utilisateur.

JsonResult

Json

Retourne un objet JSON sérialisé.

JavaScriptResult

JavaScript

Retourne un script pouvant être exécuté sur le client.

FileResult

File

Retourne une sortie binaire à écrire dans la réponse.

EmptyResult

(Aucun)

Représente une valeur de retour utilisée si la méthode d'action doit retourner un résultat null (void).

Par défaut, l'infrastructure MVC traite toutes les méthodes publiques d'une classe de contrôleur comme des méthodes d'action. Si votre classe de contrôleur contient une méthode publique et que vous ne souhaitez pas la définir comme une méthode d'action, vous devez la marquer avec l'attribut NonActionAttribute.

L'exemple suivant présente une méthode marquée avec l'attribut NonAction.

[NonAction]
private void DoSomething()
{
    // Method logic.
}

Par défaut, les valeurs des paramètres de méthodes d'action sont récupérées à partir de la collecte de données de la demande. La collecte de données inclut des paires nom/valeur pour les données de formulaire, les valeurs de chaîne de requête et les valeurs de cookie.

La classe de contrôleur recherche la méthode d'action et détermine toutes les valeurs de paramètre de la méthode d'action, en fonction de l'instance RouteData et des données de formulaire. Si la valeur du paramètre ne peut pas être analysée et si le type du paramètre est un type référence ou un type valeur Nullable, null est passé comme valeur de paramètre. Sinon, une exception est levée.

Plusieurs méthodes permettent d'accéder aux valeurs de paramètre d'URL dans les méthodes d'action des classes de contrôleur. La classe Controller expose les propriétés Request et Response accessibles dans une méthode d'action. Ces propriétés ont la même sémantique que les objets HttpRequest et HttpResponse qui font déjà partie d'ASP.NET. Toutefois, les objets Request et Response de la classe Controller acceptent les objets qui implémentent les classes abstraites HttpRequestBase et HttpResponseBase au lieu d'être des classes sealed. Ces classes de base facilitent la création d'objets fictifs, qui à leur tour simplifient la création des tests unitaires pour les classes de contrôleur.

L'exemple suivant montre comment utiliser l'objet Request pour récupérer une valeur de chaîne de requête nommée id.

public void Detail()
{
    int id = Convert.ToInt32(Request["id"]);
}

L'infrastructure ASP.NET MVC permet de mapper automatiquement des valeurs de paramètre d'URL aux valeurs de paramètre des méthodes d'action. Par défaut, si une méthode d'action accepte un paramètre, l'infrastructure MVC examine les données de demandes entrantes et détermine si la demande contient une valeur de requête HTTP de même nom. Si tel est le cas, la valeur de demande est automatiquement passée à la méthode d'action.

L'exemple suivant est une variante de l'exemple précédent. Dans cette variante, le paramètre id est supposé être mappé à une valeur de demande qui est également nommée id. Du fait de ce mappage automatique, la méthode d'action n'a pas besoin d'inclure de code pour obtenir une valeur de paramètre à partir de la demande, ce qui facilite l'utilisation de la valeur de paramètre.

public ResultAction Detail(int id)
{
    ViewData["DetailInfo"] = id;
    return View();
}

Vous pouvez également incorporer des valeurs de paramètre dans l'URL, au lieu de les inclure en tant que valeurs de chaîne de requête. Ainsi, au lieu d'utiliser l'URL avec une chaîne de requête (par exemple, /Products/Detail?id=3), vous pouvez employer une URL telle que /Products/Detail/3. La règle de mappage d'itinéraire par défaut a le format /{controller}/{action}/{id}. Si un sous-chemin d'accès d'URL figure après les noms de contrôleur et d'action dans l'URL, il est traité comme un paramètre nommé id et passé automatiquement à la méthode d'action en tant que valeur de paramètre.

L'infrastructure MVC prend également en charge des arguments facultatifs pour les méthodes d'action. La gestion des paramètres optionnels de l'infrastructure MVC s'effectue en utilisant des arguments de type Nullable pour les méthodes d'action de contrôleur. Par exemple, si une méthode peut accepter une date dans la chaîne de requête, mais que vous souhaitez utiliser par défaut la date du jour si le paramètre de chaîne de requête est manquant, vous pouvez employer du code tel que celui présenté dans l'exemple suivant :

public ActionResult ShowArticles(DateTime? date)
{
    if(!date.HasValue)
    {
        date = DateTime.Now;
    }
    // ...
}

Si la demande inclut une valeur pour le paramètre de date, cette valeur est passée à la méthode ShowArticles. Si la demande n'inclut pas de valeur pour ce paramètre, l'argument est null et le contrôleur peut exécuter toute action requise pour gérer le paramètre manquant.

Ajouts de la communauté

AJOUTER
Afficher: