2009-05-18 12 views
181

ASP.NET MVC kann HTML-Elemente mit HTML-Helfern erzeugen, zum Beispiel @Html.ActionLink(), @Html.BeginForm() und so weiter.Wie kann ich einem HTML-Element, das von den HTML-Helfern von MVC generiert wird, ein Klassenattribut hinzufügen?

Ich weiß, ich Form Attribute durch eine anonymous object Erstellen und übergeben das Objekt für die (vierte in diesem Fall) htmlAttributes Parameter angeben kann, wo ein id für das Element festgelegt wird:

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

es aber mit der class Attribut ? Offensichtlich funktioniert das nicht:

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

Da diese nur zufällige Syntaxfehler führt, wenn meine Ansicht angefordert wird, weil es etwas anderes, nachdem die Begegnung mit dem C# Schlüsselwort class erwartet.

habe ich auch versucht:

new { _class = "myclass"} 

und

new { class_ = "myclass"} 

Aber auch sie hat nicht funktioniert, wie die underscores get replaced by dashes.

Ich weiß, dass ich genauso gut die HTML-Elemente von Hand schreiben oder das Formular in eine <div class="myClass"> umhüllen kann, aber ich wäre immer noch interessiert zu wissen, wie es gemacht werden soll.

Antwort

341

Um einen anonymen Typ (oder jede Art) mit einer Eigenschaft zu erstellen, die eine reserved keyword wie sein Name in C#, können Sie den Namen der Eigenschaft mit einem at-Zeichen voranstellen, @:

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

Für VB.NET this syntax would be erreichte den Punkt mit, ., die in dieser Sprache ist Standard-Syntax für all anonymous types:

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

Perfekt. Vielen Dank! :-) –

+0

Der Parser ist nicht schlau genug, IMO, wenn er diesen Hinweis benötigt, da der Kontext an diesem Punkt im Code steht. – toddmo

3

Aktuelles best Practice in CSS Entwicklung ist allgemeine sele zu schaffen ctors mit Modifikatoren, die auf der gesamten Website so weit wie möglich angewendet werden können. Ich würde versuchen, separate Stile für einzelne Seitenelemente zu vermeiden. Wenn der Zweck der CSS-Klasse für das Element <form/> darin besteht, den Stil der Elemente innerhalb des Formulars zu steuern, können Sie das Klassenattribut das vorhandene Element <fieldset/> hinzufügen, das standardmäßig jedes Formular in von ASP.NET generierten Webseiten kapselt MVC. Eine CSS-Klasse im Formular ist selten erforderlich.

+4

Sie haben sicherlich recht, aber dieser Fall ist anders. Ich suchte nach einer Möglichkeit, Metadaten für einige jQuery-Plugins anzugeben. Dies geschieht normalerweise, indem das Klassenattribut missbraucht wird. –

+13

Sie können Best Practices vorschlagen, aber wenn ich eine Vorlage habe, die CSS in einem Formular verwendet, werde ich die Vorlage nicht metzeln, um sie "korrekt" zu machen. Die Realität ist, ein Kunde wird nicht mehr bezahlen, weil Sie das Richtige getan haben, von css ... –

+1

@ChristianPayne Sie könnten gezwungen sein, in Zukunft mehr zu bezahlen, weil Sie es nicht getan haben. –