39 votes

Ajouter une classe css à Html.EditorFor dans MVC 2

J'essaie d'ajouter une classe css à une zone de texte. Voici ce que j'ai dans ma vue :

<%: Html.EditorFor(m => m.StartDate) %>

J'ai essayé de suivre les instructions de ce site lien en faisant mon code :

<%: Html.EditorFor(m => m.StartDate, new { @class: "datepicker" }) %>

Mais j'obtiens une erreur de compilation disant :

Erreur de syntaxe, ',' attendu

Qu'est-ce que je fais de mal ici ?

78voto

Aaron Daniels Points 6052

Avec MVC3, je n'arrêtais pas de me casser la tête parce que je n'arrivais pas à faire fonctionner ce système. Je ne voulais pas créer un EditorTemplate entier pour simplement ajouter une classe.

Et bien, au lieu d'utiliser EditorFor, utilisez TextBoxFor avec, bien sûr, le signe égal, comme suit :

@Html.TextBoxFor(m=> m.ZipCode, new { @class = "zip" })

24voto

Chase Florell Points 18248

Je vous conseille vivement d'utiliser Modèles d'éditeurs . C'est définitivement la "bonne" façon de coiffer votre EditorFor.

Vous pouvez indiquer à une propriété de modèle d'utiliser un modèle d'éditeur de deux manières différentes.

La première (la plus simple) consiste à créer un modèle d'éditeur pour un certain type de données - DateTime par exemple.
La deuxième façon de procéder est de la définir de manière déclarative dans vos DataAnnotations en utilisant une balise UIHint .

Modifier
J'aimerais également ajouter que vous devriez utiliser le type "date" dans votre champ de saisie afin que, même lorsque JavaScript est désactivé, votre utilisateur puisse toujours voir un sélecteur de date natif (valable uniquement sur les navigateurs HTML5 modernes).
<input id="meeting" type="date" value="2011-01-13"/>

5voto

idor_brad Points 1157

Je suppose qu'une façon rapide et sale de faire cela serait dans jQuery, oui ?

$(document).ready(function () {
    $('#StartDate').addClass('datepicker');
});

4voto

CIA Points 250

Idéalement, vous devriez utiliser les modèles de l'éditeur. J'ai contourné ce problème en utilisant le modèle d'éditeur dans MvcHtmlString.Create() qui vous permettra de reconstruire le code HTML réel. Bien sûr, vous devrez copier tout ce qui se trouve dans la section "class" pour que le modèle d'éditeur soit aussi utile que possible.

J'ai essayé plusieurs des suggestions ci-dessus, mais finalement, j'ai opté pour cette solution, car je pense qu'elle est moins compliquée et qu'elle me permet de continuer à utiliser les modèles d'éditeur :

@MvcHtmlString.Create(Html.EditorFor(m => m.StartDate).ToString().Replace("class=\"text-box single-line\"", "class=\"text-box single-line datepicker\""))

3voto

santiagoIT Points 6633

Il n'y a pas de surcharge pour EditorFor qui vous permette de définir des HtmlProperties. (IDictionary htmlAttributes)

Ce lien explique comment procéder :

http://aspadvice.com/blogs/kiran/archive/2009/11/29/Adding-html-attributes-support-for-Templates- 2D00 -ASP.Net-MVC-2.0-Beta_2D00_1.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X