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ć.

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" })

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.