Vue d'ensemble des contrôleurs ASP.NET MVC

Lainé Vincent (Traduction)

Cet article explore le sujet des contrôleurs, des contrôleurs d'actions et des résultats d'actions. Une fois ce tutorial fini, vous serez en mesure de comprendre comment les contrôleurs gèrent la navigation des visiteurs.

- Titre : Vue d'ensemble des contrôleurs ASP.NET MVC

- Auteur : Lainé Vincent (Traduction)

- Parution : 19 avril 2009

- Licence : Copyright ® 2009 Vincent Lainé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Traduction

- B. Comprendre les contrôleurs

- C. Comprendre les actions des contrôleurs

- D. Comprendre les résultats d'action

- E. Résumé

Traduction

Cet article est la traduction la plus fidèle possible de l'article original : ASP.NET MVC Controller Overview

B - Comprendre les contrôleurs

Les contrôleurs MVC ont pour rôle de répondre à une requête d'un navigateur sur un site MVC. Toute les url sont mappés à un contrôleur particulier. Par exemple imaginez que vous tapiez cette url dans votre barre d'adresse :
http://localhost/Product/Index/3
Dans ce cas un contrôleur nommé ProductController est appelé. ProductController est chargé de générer la réponse à la requête. Par exemple le contrôleur peut retourner une vue particulière au navigateur ou rediriger la requête vers un autre contrôleur.

Controllers\ProductController.cs

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

namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
//
// GET: /Products/

public ActionResult Index()
{
// Add action logic here
return View();
}

}
}

Comme vous pouvez le voir, un contrôleur est juste une classe (au sens C# ou VB.NET). Un contrôleur hérite de la classe System.Web.Mvc.Controller. Grâce à cet héritage, un contrôleur obtient un certain de nombre de méthodes très intéressante sans aucun effort ! (Nous allons parler de ces méthodes dans un moment).

C - Comprendre les actions des contrôleurs

Les contrôleurs exposent des Actions. Une action est une méthode qui est appelé lorsque vous entrez une url particulière dans votre barre d'adresse. Par exemple, imaginez que vous entrez l'adresse suivante :
http://localhost/Product/Index/3
Dans ce cas la méthode Index() du contrôleur ProductController est appelé. La méthode Index() est un exemple d'action de contrôleur.
Une action doit être une méthode publique de la classe contrôleur. Par défaut les méthodes sont privées en C#. Il faut comprendre que toutes les méthodes publiques d'un contrôleur sont automatiquement des actions. Vous devez donc faire attention car elles peuvent être appelées par n'importe qui de n'importe où simplement en tapant l'adresse correct dans un navigateur.
Il existe d'autre condition pour qu'une méthode soit une action. Une méthode utilisée entant qu'action ne doit pas être surchargée. De plus elle les actions de contrôleurs ne peuvent pas être statique. A part cela, vous pouvez n'importe quelle méthode comme action.

D - Comprendre les résultats d'action

Une action de contrôleur renvoi quelque appelé "résultat d'action". Un résultat d'action est ce qu'une action renvoi au navigateur en réponse à la requête.
Le framework ASP.NET MVC supporte un certain nombre de résultat d'action incluant :

- ViewResult : Une vue affichant de l'HTML

- EmptyResult : Représente une absence de résultat

- RedirectResult : Représente une redirection vers une URL

- JsonResult : Représente un résultat sous forme de JavaScript Object Notation qui peut être utilisé dans une application Ajax

- JavaScriptResult : Représente un script JavaScript

- ContentResult : Représente un résultat sous forme de texte

- FileContentResult : Représente un fichier binaire à télécharger

- FilePathResult : Représente un chemin de fichier à télécharger

- FileStreamResult : Représente un flux de fichier à télécharger

Tout ces résultats d'actions héritent de la classe ActionResult.
Dans la plus part des cas, une action renvoi un ViewResult. Par exemple l'action Index() dans l'exemple 2 renvoi un ResultView.

Controllers\BookController.cs

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

namespace MvcApplication1.Controllers
{
public class BookController : Controller
{

public ActionResult Index()
{
// Add action logic here
return View();
}

}
}

Quant une action renvoi un ViewResult, de l'HTML est retourné au navigateur. La méthode Index() dans l'exemple 2 renvoi une vue nommée Index au navigateur.

Notez que l'action Index() ne renvoi pas directement un ViewResult. A la place la méthode View() de la classe de base Controller est appelé. Normalement vous ne renvoyez pas un ActionResult directement. A la place vous devez utiliser une des méthodes suivantes de la classe contrôleur :

- View : Renvoi un ViewResult

- Redirect : Renvoi un RedirectResult

- RedirectToAction : Renvoi un RedirectToActionResult

- RedirectToRoute : Renvoi un RedirectToRouteResult

- Json : Renvoi un JsonResult

- JavascriptResult : Renvoi un JavaScriptResult

- Content : Renvoi un ContentResult

- File : Renvoi un FileContentResult, FilePathResult, FileStreamResult en fonction des paramètres

Si vous souhaitez renvoyer une vue au navigateur, vous appelez la méthode View(). Si vous souhaitez rediriger l'utilisateur vers une autre action, vous appelez la méthode RedirectToAction. Par exemple dans la méthode Detail() de l'exemple 3, soit on affiche la vue Detail, soit on redirige l'utilisateur vers l'Index en fonction de la valeur du paramètre Id

Controller\CustomerController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
public class CustomerController : Controller
{
public ActionResult Details(int? id)
{
if (!id.HasValue)
return RedirectToAction("Index");

return View();
}

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

}
}

La méthode ContentResult est spéciale. Vous pouvez utilisez le résultat ContentResult pour renvoyer un résultat sous forme de texte. Par exemple, le méthode Index de l'exemple 4 renvoi un message texte au lieu d'HTML.

Controllers\StatusController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
public class StatusController : Controller
{

public ActionResult Index()
{
return Content("Hello World!");
}

}
}

Quand l'action StatusController.Index() est appelé, une vue n'est pas retournée, à la place le texte "Hello World!" est renvoyé au navigateur.

Si une action renvoi un résultat qui n'est pas un ActionResult, alors ce résultat est automatiquement encapsulé dans un ContentResult. Par exemple quand l'action Index() de l'exemple 5 est appelé la date est renvoyé dans ContentResult automatiquement :

using System;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
public class WorkController : Controller
{

public DateTime Index()
{
return DateTime.Now;
}

}
}

L'action Index de l'exemple 5 renvoi un objet DateTime. Le framework ASP.NET MVC convertie le DateTime en string et l'encapsule dans un ContentResult automatiquement. Le navigateur obtient le datetime entant que texte simple.

E - Résumé

Le but de cet article était d'introduire les contrôleurs ASP.NET MVC, les actions et résultats d'action. Dans la première partie vous avez vu comment ajouter de nouveau contrôleur dans un projet ASP.NET MVC. Ensuite vous avez vu comment les méthodes publiques d'un contrôleur sont exposées au monde en tant qu'action. Finalement nous avons discuté des divers résultats d'actions qui peuvent être renvoyés par une action. En particulier nous avons parlé de comment renvoyer un ViewResult, un RedirectToActionResult et un ContentResult depuis une action.