Come posso aggiungere un attributo di classe a un elemento HTML generato dagli helper HTML di MVC?


188

ASP.NET MVC in grado di generare gli elementi HTML utilizzando HTML Helpers, per esempio @Html.ActionLink(), @Html.BeginForm()e così via.

So che posso specificare gli attributi del modulo creando un oggetto anonimo e passare quell'oggetto per il htmlAttributesparametro (quarto in questo caso) in cui specificando un idper l'elemento:

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

Ma per quanto riguarda l' classattributo? Ovviamente questo non funziona:

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

Poiché ciò genera errori di sintassi casuali quando viene richiesta la mia vista, perché si aspetta qualcos'altro dopo aver incontrato la parola chiave C # class.

Ho anche provato:

new { _class = "myclass"}

e

new { class_ = "myclass"}

Ma non hanno funzionato, poiché i trattini bassi vengono sostituiti da trattini .

So che posso anche scrivere gli elementi HTML a mano o avvolgere il modulo all'interno di un <div class="myClass">, ma sarei comunque interessato a sapere come dovrebbe essere fatto.

Risposte:


348

Per creare un tipo anonimo (o qualsiasi tipo) con una proprietà che ha una parola chiave riservata come nome in C #, puoi anteporre il nome della proprietà con un segno @:

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

Per VB.NET questa sintassi verrebbe realizzata usando il punto ., che in quella lingua è la sintassi predefinita per tutti i tipi anonimi :

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

Il parser non è abbastanza intelligente, IMO, se ha bisogno di quel suggerimento dato il contesto in cui si trova a quel punto nel codice.
toddmo

3

La migliore pratica corrente nello sviluppo di CSS è quella di creare selettori più generali con modificatori che possano essere applicati il ​​più ampiamente possibile in tutto il sito web. Vorrei provare a evitare di definire stili separati per i singoli elementi della pagina.

Se lo scopo della classe CSS <form/>sull'elemento è controllare lo stile degli elementi all'interno del modulo, è possibile aggiungere l'attributo class <fieldset/>all'elemento esistente che incapsula qualsiasi modulo per impostazione predefinita nelle pagine Web generate da ASP.NET MVC. Una classe CSS nel modulo è raramente necessaria.


4
Hai certamente ragione, tuttavia questo caso è diverso. Stavo cercando un modo per specificare i metadati per alcuni plugin jquery. Questo di solito viene fatto abusando dell'attributo class.
Adrian Grigore,

13
Puoi suggerire le migliori pratiche, ma se ho un modello che utilizza CSS su un modulo, non ho intenzione di macellare il modello per renderlo "corretto". La realtà è che un cliente non pagherà di più perché hai fatto la cosa giusta per css ...
Christian Payne,

1
@ChristianPayne Potrebbero essere costretti a pagare di più in futuro perché non l'hai fatto.
Ian Warburton,

1
Ho votato verso il basso questa risposta perché non risponde alla domanda. Una risposta più appropriata risponderebbe prima alla domanda, quindi fornire indicazioni sulle migliori pratiche.
Ben
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.