Jak mogę dodać atrybut klasy do elementu HTML generowanego przez pomocników HTML MVC?

188

ASP.NET MVC może generować elementów HTML za pomocą HTML pomocników, na przykład @Html.ActionLink(), @Html.BeginForm()i tak dalej.

Wiem, że mogę określić atrybuty formularza, tworząc anonimowy obiekt i przekazać ten obiekt dla parametru (w tym przypadku czwartego) htmlAttributes, w którym określa się iddla elementu:

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

Ale co z classatrybutem? Oczywiście to nie działa:

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

W ten sposób generowane są losowe błędy składniowe, gdy żądany jest mój widok, ponieważ oczekuje czegoś innego po napotkaniu słowa kluczowego C # class.

Próbowałem też:

new { _class = "myclass"}

i

new { class_ = "myclass"}

Ale również nie działały, ponieważ podkreślenia zostały zastąpione myślnikami .

Wiem, że równie dobrze mogę ręcznie pisać elementy HTML lub owinąć formularz wewnątrz <div class="myClass">, ale nadal chciałbym wiedzieć, jak to zrobić.

Adrian Grigore
źródło

Odpowiedzi:

348

Aby utworzyć anonimowy typ (lub dowolny typ) z właściwością, która ma zarezerwowane słowo kluczowe jako nazwę w języku C #, możesz poprzedzić nazwę właściwości znakiem at @:

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

W przypadku VB.NET ta składnia zostałaby osiągnięta za pomocą kropki ., która w tym języku jest domyślną składnią dla wszystkich anonimowych typów :

Html.BeginForm("Foo", "Bar", FormMethod.Post, new with { .class = "myclass" })
Społeczność
źródło
Analizator składni nie jest wystarczająco inteligentny, IMO, jeśli potrzebuje tej wskazówki, biorąc pod uwagę kontekst, w którym znajduje się w tym punkcie kodu.
toddmo
3

Obecnie najlepszą praktyką w rozwoju CSS jest tworzenie bardziej ogólnych selektorów z modyfikatorami, które mogą być stosowane tak szeroko, jak to możliwe na całej stronie internetowej. Starałbym się unikać definiowania osobnych stylów dla poszczególnych elementów strony.

Jeśli celem klasy CSS w <form/>elemencie jest kontrola stylu elementów w formularzu, można dodać atrybut klasy do istniejącego <fieldset/>elementu, który domyślnie otacza dowolny formularz na stronach internetowych generowanych przez ASP.NET MVC. Klasa CSS w formularzu rzadko jest konieczna.

Tim
źródło
4
Z pewnością masz rację, jednak ten przypadek jest inny. Szukałem sposobu na określenie metadanych dla kilku wtyczek jquery. Zwykle odbywa się to przez niewłaściwe użycie atrybutu klasy.
Adrian Grigore
13
Możesz zasugerować najlepsze praktyki, ale jeśli mam szablon, który używa css w formularzu, nie zamierzam rzeźnickiego szablonu, aby był „poprawny”. Rzeczywistość jest taka, że ​​klient nie będzie płacił więcej, ponieważ zrobiłeś właściwą rzecz przez css ...
Christian Payne
1
@ChristianPayne Mogą być zmuszeni zapłacić więcej w przyszłości, ponieważ tak nie było.
Ian Warburton,
1
Głosowałem za odrzuceniem tej odpowiedzi, ponieważ nie odpowiada ona na pytanie. Bardziej odpowiednia odpowiedź odpowiedziałaby najpierw na pytanie, a następnie zawiera wskazówki dotyczące najlepszych praktyk.
Ben