2009-05-18 10 views
181

ASP.NET MVC peut générer des éléments HTML en utilisant HTML Helpers, par exemple @Html.ActionLink(), @Html.BeginForm() et ainsi de suite.Comment puis-je ajouter un attribut de classe à un élément HTML généré par les HTML Helpers de MVC?

Je sais que je peux spécifier des attributs de forme en créant un anonymous object et de transmettre cet objet pour le (quatrième dans ce cas) htmlAttributes paramètre où la spécification d'un id pour l'élément:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { id = "MyForm"}) 

Mais qu'en est l'attribut class ? Il est évident que cela ne fonctionne pas:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { class = "myclass"}) 

Comme qui vient de syntaxe renvoie des erreurs aléatoires lorsque mon point de vue est demandée, car il attend quelque chose d'autre après avoir rencontré le C# mot-clé class.

J'ai aussi essayé:

new { _class = "myclass"} 

et

new { class_ = "myclass"} 

Mais ils ont aussi ne fonctionne pas, comme underscores get replaced by dashes.

Je sais que je peux tout aussi bien écrire les éléments HTML à la main ou envelopper le formulaire dans un <div class="myClass">, mais je serais toujours intéressé de savoir comment il est censé être fait.

Répondre

341

Afin de créer un type anonyme (ou tout autre type) avec une propriété qui a un reserved keyword comme son nom en C#, vous pouvez préfixer le nom de la propriété avec un arobase, @:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { @class = "myclass"}) 

Pour VB.NET this syntax would be accompli en utilisant le point, ., qui dans cette langue est la syntaxe par défaut pour all anonymous types:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new with { .class = "myclass" }) 
+0

Parfait. Merci! :-) –

+0

L'analyseur n'est pas assez intelligent, IMO, s'il a besoin de cette indication étant donné le contexte dans lequel il se trouve à ce point du code. – toddmo

3

les meilleures pratiques actuelles en matière de développement CSS est de créer sele plus général des agents avec des modificateurs qui peuvent être appliqués aussi largement que possible sur tout le site Web. J'essaierais d'éviter de définir des styles séparés pour les éléments de page individuels. Si le but de la classe CSS sur l'élément <form/> est de contrôler le style des éléments dans le formulaire, vous pouvez ajouter l'attribut de classe l'élément existant <fieldset/> qui encapsule n'importe quelle forme par défaut dans les pages Web générées par ASP.NET MVC. Une classe CSS sur le formulaire est rarement nécessaire.

+4

Vous avez certainement raison, mais ce cas est différent. Je cherchais un moyen de spécifier des métadonnées pour quelques plugins jquery. Ceci est généralement fait en abusant de l'attribut de classe. –

+13

Vous pouvez suggérer des bonnes pratiques, mais si j'ai un modèle qui utilise css sur un formulaire, je ne vais pas le faire pour le rendre "correct". La réalité est, un client ne va pas payer plus parce que vous avez fait la bonne chose en ... –

+1

@ChristianPayne css Ils pourraient être forcés de payer plus à l'avenir parce que vous ne l'avez pas. –