févr. 17 2011

[ASP.NET MVC] Nouveautés MVC 3 Part 5 - Meilleure gestion de la génération et du rendu HTML

Category: ASP.NET | ASP.NET MVC | ASP.NET MVC 3Nicolas Esprit @ 13:53

Ce billet fait suite à la série sur les nouveautés d'ASP.NET MVC 3 écrit conjointement avec Philippe Viallate. Vous pouvez consulter les précédents billets :

Nouvelle classe AdditionalMetadataAttribute

Vous pouvez utiliser la classe AdditionalMetadataAttribute pour remplir le dictionnaire ModelMetadata.AdditionalValues pour une propriété de modèle. Par exemple, supposons qu'on ait un modèle de vue dont certaines propriétés ne doivent être visibles que pour un administrateur. Ce modèle peut être annoté avec le nouvel attribut en utilisant "AdminUniquement" comme clé et "true" comme valeur, comme on peut le voir dans l'exemple ci-dessous :

public class ProductViewModel {
[AdditionalMetadata("AdminUniquement", true)]
public string Name {get; set;}
}

Cette classe permet donc facilement d'ajouter des attributs accessibles lors du rendu. Charge au développeur d'interpréter ces métadonnées supplémentaires et de les utiliser.

 

Nouvelle méthode Html.Raw

Par défaut, le moteur Razor encode en HTML toutes les valeurs. Pour pallier cela, MVC 3 introduit une nouvelle méthode : Html.Raw(). Pour illustrer ceci, supposons qu'on stocke dans une variable string du code HTML et qu'on souhaite l'afficher ensuite. Lors du rendu le code HTML sera interprété. Par exemple le code ci-dessous :

@{
string mvcLink = "<a href=\"http://asp.net/mvc\" title=\"ASP.NET MVC Website\">http://asp.net/mvc</a>";
}
<p>To learn more about ASP.NET MVC visit @mvcLink.</p>

<p>To learn more about ASP.NET MVC visit @Html.Raw(mvcLink)</p>
 

Affichera le résultat ci-dessous. On peut voir que le contenu de la variable "mvcLink" est encodé en HTML, tandis que grâce à l'appel à la nouvelle méthode Html.Raw le contenu de la variable est bien interprété et le contenu de la variable "mvcLink" est rendu sous forme de lien HTML.

 

 

Changements dans la méthode Html.ValidationMessage

Le framework ASP.NET MVC fournit deux Helpers pour la validation, Html.ValidationMessage et Html.ValidationSummary, qui sont utilisés pour afficher des messages d'erreur lors de la validation. Le Helper Html.ValidationMessage a été modifié avec MVC 3 afin d'afficher désormais le premier message d'erreur utile plutôt que de simplement afficher la première erreur. Durant le binding du modèle, le dictionnaire ModelState peut être alimenté par plusieurs sources avec des messages d'erreur à propos d'une propriété, y compris à partir du modèle lui-même (s'il implémente l'interface IValidatableObject), de la validation des attributs appliqués à la propriété, ainsi que des exceptions rencontrées lors de l'accès à la propriété.

Lorsque la méthode Html.ValidationMessage affiche un message de validation, elle ne prend désormais plus en compte les entrées dans le dictionnaire ModelState qui incluent une exception, parce que ce sont généralement des messages d'erreur qui ne sont pas destinés à l'utilisateur. Au lieu de cela, la méthode recherche le premier message de validation qui n'est pas associé à une exception et affiche ce message. Si aucun message non associé à une exception n'est trouvé, alors elle prendra le premier message qui vient et affichera le message d'erreur générique associé à l'exception. Bref, cette modification apportée par MVC 3 n'aura pas d'impact dans votre manière de coder, mais d'un point de vue utilisateur elle optimisera l'affichage de message d'erreur User-Friendly.

 

Modifications apportées aux méthodes des Helpers

Les méthodes des Helpers vous permettent de spécifier en attribut une paire nom/valeur en utilisant un objet anonyme comme on peut le voir ci-dessous :

Html.TextBox("Nom", "Valeur", new {titre = "Titre"})

Cette approche ne vous permet pas d'utiliser des traits d'union dans le nom des attributs, puisque le trait d'union ne peut être utilisé pour le nom d'une propriété en ASP.NET. Cependant, il faut prendre en compte l'arrivée prochaine d'HTML 5 ! Et cette nouvelle version du langage HTML utilisera beaucoup les traits d'unions pour les propriétés utilisant "data-" comme préfixe. Dans un même temps, les underscores ne peuvent être utilisés dans les noms d'attributs HTML mais sont valides pour les noms de propriétés en ASP.NET. Tentant compte de cela, et pour permettre l'utilisation des traits d'union en prévision de l'arrivée de HTML5, ASP.NET MVC 3 vous permet maintenant de spécifier les attributs à l'aide d'un objet anonyme en utilisant des underscores afin qu'ils soient transformés en traits d'union lors du rendu HTML. L'exemple ci-dessous illustre cette modification :

Html.TextBox("Nom", "Valeur", new {data_required = "true"})

Le code ci-dessus verra donc son underscore (sur l'attribut "data_required") transformé en trait d'union lors de l'exécution du Helper. Nous aurons donc au final le rendu HTML suivant :

<input data-required="true" id="Nom" name="Nom" type="textbox" value="Valeur" />

A ce sujet, il est recommander de lire ces deux articles sur les différents Helpers Html : partie 1, partie 2.

 

Surcharge des méthodes LabelFor et LabelForModel

ASP.NET MVC 3 inclut des surcharges des méthodes LabelForModel et LabelFor. Ces nouvelles surcharges vous permettent de spécifier ou remplacer le texte du Label.

 

 

Tags: , , ,

Commentaires

1.
trackback ASP.NET Français Blogs says:

[ASP.NET MVC] Nouveautés MVC 3 Part 10 - Upgrader ses projets ASP.NET MVC 2 vers MVC 3

Avant de mettre fin à cette série de billet sur les nouveautés d'ASP.NET MVC

Les commentaires sont clos