Partager via


Vue d’ensemble du contrôleur ASP.NET MVC (C#)

par Stephen Walther

Dans ce tutoriel, Stephen Walther vous présente ASP.NET contrôleurs MVC. Vous apprenez à créer de nouveaux contrôleurs et à retourner différents types de résultats d’action.

Ce tutoriel explore la rubrique de ASP.NET contrôleurs MVC, les actions du contrôleur et les résultats des actions. Une fois ce tutoriel terminé, vous comprendrez comment les contrôleurs sont utilisés pour contrôler la façon dont un visiteur interagit avec un ASP.NET site web MVC.

Présentation des contrôleurs

Les contrôleurs MVC sont chargés de répondre aux demandes adressées à un ASP.NET site web MVC. Chaque requête de navigateur est mappée à un contrôleur particulier. Par exemple, imaginez que vous entrez l’URL suivante dans la barre d’adresse de votre navigateur :

http://localhost/Product/Index/3

Dans ce cas, un contrôleur nommé ProductController est appelé. Le ProductController est responsable de la génération de la réponse à la demande du navigateur. Par exemple, le contrôleur peut renvoyer une vue particulière au navigateur ou le contrôleur peut rediriger l’utilisateur vers un autre contrôleur.

La liste 1 contient un contrôleur simple nommé ProductController.

Listing1 - 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 dans la liste 1, un contrôleur n’est qu’une classe (une classe Visual Basic .NET ou C#). Un contrôleur est une classe qui dérive de la classe System.Web.Mvc.Controller de base. Étant donné qu’un contrôleur hérite de cette classe de base, un contrôleur hérite gratuitement de plusieurs méthodes utiles (nous abordons ces méthodes dans un instant).

Présentation des actions du contrôleur

Un contrôleur expose les actions du contrôleur. Une action est une méthode sur un contrôleur qui est appelée lorsque vous entrez une URL particulière dans la barre d’adresse de votre navigateur. Par exemple, imaginez que vous effectuez une demande pour l’URL suivante :

http://localhost/Product/Index/3

Dans ce cas, la méthode Index() est appelée sur la classe ProductController. La méthode Index() est un exemple d’action de contrôleur.

Une action de contrôleur doit être une méthode publique d’une classe de contrôleur. Les méthodes C#, par défaut, sont des méthodes privées. Sachez que toute méthode publique que vous ajoutez à une classe de contrôleur est exposée automatiquement en tant qu’action de contrôleur (vous devez être prudent à ce sujet, car une action de contrôleur peut être appelée par n’importe qui dans l’univers simplement en tapant l’URL de droite dans une barre d’adresse du navigateur).

Certaines exigences supplémentaires doivent être satisfaites par une action du contrôleur. Une méthode utilisée comme action de contrôleur ne peut pas être surchargée. En outre, une action de contrôleur ne peut pas être une méthode statique. En dehors de cela, vous pouvez utiliser à peu près n’importe quelle méthode comme action de contrôleur.

Présentation des résultats de l’action

Une action de contrôleur retourne quelque chose appelé résultat d’action. Un résultat d’action est ce qu’une action de contrôleur retourne en réponse à une demande de navigateur.

L’infrastructure MVC ASP.NET prend en charge plusieurs types de résultats d’action, notamment :

  1. ViewResult : représente le code HTML et le balisage.
  2. EmptyResult : ne représente aucun résultat.
  3. RedirectResult : représente une redirection vers une nouvelle URL.
  4. JsonResult : représente un résultat de notation d’objet JavaScript qui peut être utilisé dans une application AJAX.
  5. JavaScriptResult : représente un script JavaScript.
  6. ContentResult : représente un résultat texte.
  7. FileContentResult : représente un fichier téléchargeable (avec le contenu binaire).
  8. FilePathResult : représente un fichier téléchargeable (avec un chemin d’accès).
  9. FileStreamResult : représente un fichier téléchargeable (avec un flux de fichiers).

Tous ces résultats d’action héritent de la classe ActionResult de base.

Dans la plupart des cas, une action de contrôleur retourne un ViewResult. Par exemple, l’action Indexer le contrôleur dans la liste 2 retourne un ViewResult.

Listing 2 - 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();
        }
    }
}

Lorsqu’une action retourne un objet ViewResult, le code HTML est retourné au navigateur. La méthode Index() dans Listing 2 retourne une vue nommée Index au navigateur.

Notez que l’action Index() dans Listing 2 ne retourne pas de ViewResult(). Au lieu de cela, la méthode View() de la classe de base controller est appelée. Normalement, vous ne retournez pas directement un résultat d’action. Au lieu de cela, vous appelez l’une des méthodes suivantes de la classe de base controller :

  1. Affichage : renvoie un résultat d’action ViewResult.
  2. Redirection : renvoie un résultat d’action RedirectResult.
  3. RedirectToAction : renvoie un résultat d’action RedirectToRouteResult.
  4. RedirectToRoute : renvoie un résultat d’action RedirectToRouteResult.
  5. Json : renvoie un résultat d’action JsonResult.
  6. JavaScriptResult : renvoie une valeur JavaScriptResult.
  7. Contenu : renvoie un résultat d’action ContentResult.
  8. Fichier : renvoie un FichierContentResult, FilePathResult ou FileStreamResult en fonction des paramètres passés à la méthode.

Par conséquent, si vous souhaitez retourner une vue dans le navigateur, vous appelez la méthode View(). Si vous souhaitez rediriger l’utilisateur d’une action de contrôleur vers une autre, vous appelez la méthode RedirectToAction(). Par exemple, l’action Détails() de la liste 3 affiche une vue ou redirige l’utilisateur vers l’action Index() selon que le paramètre Id a une valeur.

Référencement 3 - 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();
        }

    }
}

Le résultat de l’action ContentResult est spécial. Vous pouvez utiliser le résultat de l’action ContentResult pour renvoyer un résultat d’action sous forme de texte brut. Par exemple, la méthode Index() dans listing 4 retourne un message en texte brut et non en HTML.

Liste 4 - Controllers\StatusController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class StatusController : Controller
    {
        public ActionResult Index()
        {
            return Content("Hello World!");
        }
    }
}

Lorsque l’action StatusController.Index() est appelée, aucune vue n’est retournée. Au lieu de cela, le texte brut « Hello World ! » est retourné dans le navigateur.

Si une action de contrôleur retourne un résultat qui n’est pas un résultat d’action (par exemple, une date ou un entier), le résultat est automatiquement encapsulé dans un ContentResult. Par exemple, lorsque l’action Index() du WorkController dans la liste 5 est appelée, la date est retournée automatiquement en tant que ContentResult.

Listing 5 - WorkController.cs

using System;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class WorkController : Controller
    {
        public DateTime Index()
        {
            return DateTime.Now;
        }
    }
}

L’action Index() de la liste 5 retourne un objet DateTime. L’infrastructure MVC ASP.NET convertit l’objet DateTime en chaîne et encapsule automatiquement la valeur DateTime dans un ContentResult. Le navigateur reçoit la date et l’heure sous forme de texte brut.

Résumé

L’objectif de ce tutoriel était de vous présenter les concepts de ASP.NET contrôleurs MVC, d’actions de contrôleur et de résultats des actions de contrôleur. Dans la première section, vous avez appris à ajouter de nouveaux contrôleurs à un projet MVC ASP.NET. Ensuite, vous avez appris comment les méthodes publiques d’un contrôleur sont exposées à l’univers en tant qu’actions de contrôleur. Enfin, nous avons abordé les différents types de résultats d’action qui peuvent être retournés à partir d’une action de contrôleur. En particulier, nous avons expliqué comment retourner un ViewResult, RedirectToActionResult et ContentResult à partir d’une action de contrôleur.