ASP.NET MVC - Introduction aux vues

Pascal ROZE (Traduction)

Qu'est-ce qu'une vue ASP.NET MVC et en quoi diffère-t-elle d'une page HTML? Dans ce tutoriel, Stephen Walther vous présénte la notion de vues et vous montre comment vous pouvez tirer avantage d'une data view et de HTML helpers à l'intérieur d'une vue.

- Titre : ASP.NET MVC - Introduction aux vues

- Auteur : Pascal ROZE (Traduction)

- Parution : 22 avril 2009

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Traduction

- Introduction

- Comprendre les vues

- Ajouter du contenu à une vue

- Utiliser des HTML Helpers pour générer le contenu d'une vue

- Utiliser une View Data pour passer des données à une vue

- Conclusion

Traduction

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

Introduction

Le but de ce tutoriel est de vous fournir une brève introduction aux vues d'ASP.NET MVC, aux vues de données et aux HTML helpers. A la fin de ce tutoriel, vous devriez être capable de créer de nouvelles vues, de passer des données d'un controleur vers une vue, et d'utiliser des HTML helpers pour générer du contenu dans une vue.

Comprendre les vues

Pour ASP.NET ou Active Server Pages, le framework ASP.NET MVC ne possède rien qui correspond directement à une page. Dans une application ASP.NET MVC, il n'y a pas de page sur le disque qui correspond à l'url que vous tapez dans votre navigateur. Ce qui se rapproche le plus d'une page dans une application ASP.NET MVC est ce qu'on appelle une vue.

Listing 1 - HomeController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}

public ActionResult Details()
{
return RedirectToAction("Index");
}
}
}

Vous pouvez déclencher la 1ère action, l'action Index(), en tapant l'url suivante dans la barre d'adresse de votre navigateur:
/Home/Index.

Vous pouvez déclencher la 2nde action, l'action Details(), en tapant l'url suivante dans la barre d'adresse de votre navigateur:
/Home/Details.

L'action Index() retourne une vue. La plupart des actions que vous créez retourneront des vues. Cependant, une action peut retourner des résultats d'action d'autres types. Par exemple, l'action Details() retourne une RedirectToActionResult qui redirige la requête entrante vers l'action Index().

L'action Index() contient l'unique ligne de code suivante:
View();

Cette ligne de code retourne une vue qui doit être située à l'endroit suivant sur votre serveur web:
\Views\Home\Index.aspx.

Le chemin de la vue est obtenu à partir du nom du controleur et du nom de l'action du controleur.
Si vous préférez, vous pouvez spécifier directement la vue. La ligne de code suivante retourne une vue appelée "Fred":
View("Fred");

Quand cette ligne de code est exécutée, une vue du chemin suivant est retournée:
\Views\Home\Fred.aspx

Si vous prévoyez de créer des tests unitaires pour votre application ASP.NET MVC, alors c'est une bonne idée de nommer explicitement vos vues. Ainsi, vous pouvez créer un test unitaire pour vérifier que la vue attendue est bien retournée par une action controleur.

Ajouter du contenu à une vue

Une vue est un document (X)HTML standard qui contient des scripts. Vous utilisez des scripts pour ajouter un contenu dynamique à une vue. Par exemple, la vue du Listing 2 affiche la date et l'heure courantes.

Listing 2 - \Views\Home\Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Index</title>
</head>
<body>
<div>
The current date and time is <% Response.Write(DateTime.Now);%>
</div>
</body>
</html>

Vous pouvez voir que le corps de la page HTML dans Listing 2 contient le script suivant:
<% Response.Write(DateTime.Now);%>

Vous utilisez les délimiteurs de script <% and %> pour marquer le début et la fin du script. Ce script est écrit en C#. Il affiche la date et l'heure courantes en appelant la méthode Response.Write() pour envoyer le contenu dans le navigateur. Les délimiteurs de script <% and %> peuvent être utilisés pour exécuter une ou plusieurs instructions.

Etant donné que vous appelez Response.Write() très souvent, Microsoft fourni un raccourci pour appeler la méthode Response.Write(). La vue dans Listing 3 utilise les délimiteurs <%= and %> en tant que raccourci pour appeler la méthode Response.Write().

Listing 3 - Views\Home\Index2.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Index</title>
</head>
<body>
<div>
The current date and time is <%=DateTime.Now %>
</div>
</body>
</html>

Vous pouvez utilisez n'importe quel langage .NET pour générer du contenu dynamique dans une vue. Normalement, vous allez utilisez soit VB.NET soit C# pour écrire vos controleurs et vues.

Utiliser des HTML Helpers pour générer le contenu d'une vue

Pour rendre plus facile l'ajout de contenu dans une vue, vous pouvez tirer avantage de ce qu'on appelle un HTML Helper. Un HTML Helper, typiquement, est une méthode qui génère une chaine de caractères. Vous pouvez utiliser des HTML Helpers pour générer des éléments HTML standards tels que des zones de saisie, des liens, des listes déroulantes ou des cases à cocher.
Par exemple, la vue dans Listing 4 tire avantage de 3 HTML Helpers -- le BeginForm(), le TextBox() et le Password() helper -- pour générer un formulaire de connection (voir figure 1)

Listing 4 - \Views\Home\Login.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Login Form</title>
</head>
<body>
<div>
<% using (Html.BeginForm())
{ %>
<label for="UserName">User Name:</label>
<br />
<%= Html.TextBox("UserName") %>

<br /><br />

<label for="Password">Password:</label>
<br />
<%= Html.Password("Password") %>

<br /><br />

<input type="submit" value="Log in" />
<% } %>
</div>
</body>
</html>

Figure 01: Un formulaire de connection classique

Toutes les méthodes des HTML Helpers sont appelées dans la propriété Html de la vue. Par exemple, vous générez une zone de saisie en appelant la méthode Html.TextBox().
Notez que vous utilisez les délimiteurs de script <%= and %> lorsque vous appelez les Html.TextBox() et Html.Password() helpers. Ces helpers retournent simplement une chaine de caractères. Vous devez appeler Response.Write() pour envoyer la chaine de caractères vers le navigateur. Utiliser les HTML Helpers est facultatif. Ils vous rendent la vie plus facile en réduisant la quantité de HTML et de scripts à écrire. La vue dans Listing 5 génère exactement le même formulaire que la vue dans Listing 4 sans utiliser de HTML Helpers.

Listing 5 - \Views\Home\Login.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index4.aspx.cs" Inherits="MvcApp.Views.Home.Index4" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Login Form without Help</title>
</head>
<body>
<div>
<form method="post" action="/Home/Login">
<label for="userName">User Name:</label>
<br />
<input name="userName" />

<br /><br />

<label for="password">Password:</label>
<br />
<input name="password" type="password" />

<br /><br />
<input type="submit" value="Log In" />
</form>
</div>
</body>
</html>

Vous avez également l'option de créer vos propres HTML Helpers. Par exemple, vous pouvez créer une méthode GridView() helper qui affiche automatiquement un ensemble d'enregistrements de base de données dans un tableau HTML. Rendez-vous dans le tutoriel Creating Custom HTML Helpers pour de plus amples informations sur ce sujet.

Utiliser une View Data pour passer des données à une vue

Vous utilisez une view data pour passer des données d'un controleur vers une vue. Imaginez une view data comme un paquet que vous envoyez par courrier. Toutes les données passées d'un controleur vers une vue doivent être envoyées en utilisant ce paquet. Par exemple, le controleur dans Listing 6 ajoute un message au paquet.

Listing 6 - ProductController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
public ActionResult Index()
{
ViewData["message"] = "Hello World!";
return View();
}
}
}

La propriété ViewData du controleur représente une collection de paires noms/valeurs. Dans Listing 6, la méthode Index() ajoute un élément nommé message dont la valeur est "Hello World!" à la collection view data. Quand la vue est retournée par un appel à la méthode Index(), la view data est passée automatiquement à la vue.
La vue dans Listing 7 récupère le message dans la view data et envoie le message au navigateur.

Listing 7 - \Views\Product\Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Product Index</title>
</head>
<body>
<div>
<%= Html.Encode(ViewData["message"]) %>
</div>
</body>
</html>

Notez que la vue tire avantage de la méthode Html.Encode() du HTML Helper quand le message est généré. La méthode Html.Encode du HTML Helper transforme les caractères spéciaux tels que > et < en caractères plus sûrs à afficher dans une page web. Chaque fois que vous générez le contenu qu'un utilisateur a soumis au site web, vous devriez encoder le contenu pour vous protéger des attaques par injection de JavaScript.

(Parce que nous avons créer le message nous-même dans le ProductController, nous n'avons pas vraiment besoin de l'encoder. Cependant, c'est une bonne habitude de toujours appeler la méthode Html.Encode() pour afficher dans une vue un contenu récupéré d'une data view.)

Dans Listing 7, nous tirons avantage d'une view data pour passer un simple message d'un controleur vers une vue. Vous pouvez également utiliser une view data pour passer d'autres types de données, tels que des collections d'enregistrements de base de données, d'un controleur vers une vue. Par exemple, si vous voulez afficher le contenu de la base Products dans une vue, alors vous passeriez la collection d'enregistrements de base de données dans une view data.

Vous avez également l'option de passer des données fortement typées d'un controleur vers une vue. Rendez-vous dans le tutoriel Understanding Strongly Typed View Data and Views pour de plus amples informations sur ce sujet.

Conclusion

Ce tutoriel vous a présenté une brève introduction aux vues, view data et HTML Helpers du framework ASP.NET MVC. Dans la 1ère partie, vous avez appris comment ajouter de nouvelles vues à votre projet. Vous avez appris que vous devez ajouter une vue dans le bon dossier pour pouvoir l'appeler d'un controleur particulier. Ensuite, nous avons discuté des HTML Helpers. Vous avez appris comment les HTML Helpers vous permettez de générer facilement du contenu HTML. Finalement, vous avez appris comment tirer avantage de la view data pour passer des données d'un controleur vers une vue.