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.
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.
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
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.
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.