2009-05-18 9 views
181

ASP.NET MVC może generować elementy HTML za pomocą Pomocników HTML, na przykład @Html.ActionLink(), @Html.BeginForm() i tak dalej.Jak dodać atrybut klasy do elementu HTML wygenerowanego przez pomocników HTML MVC?

wiem, że mogę określić atrybuty formularza tworząc anonymous object i przekazać ten obiekt dla (czwarte miejsce w tym przypadku) htmlAttributes parametru gdzie określając id dla elementu:

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

ale co atrybutu class ? Oczywiście to nie działa:

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

Jako że tylko rzuca przypadkowe błędy składniowe, kiedy mój pogląd jest wymagane, ponieważ spodziewa się czegoś innego po napotkaniu C# słowa kluczowego class.

Próbowałem również:

new { _class = "myclass"} 

i

new { class_ = "myclass"} 

Ale oni również nie działa, jak underscores get replaced by dashes.

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

Odpowiedz

341

W celu stworzenia typ anonimowy (lub dowolnego typu) z nieruchomości, która ma reserved keyword jak sama nazwa w języku C#, można poprzedzić nazwę właściwości z na znak, @:

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

Dla VB.NET this syntax would be realizowane za pomocą kropki, ., który w tym języku jest domyślna Składnia all anonymous types:

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

Idealny. Dzięki! :-) –

+0

Parser nie jest wystarczająco inteligentny, IMO, jeśli potrzebuje wskazówki z kontekstu, w którym znajduje się w tym punkcie kodu. – toddmo

3

Aktualny najlepszych praktyk w rozwoju CSS jest stworzenie bardziej ogólny fo ctors z modyfikatorami, które mogą być stosowane tak szeroko jak to możliwe na całej stronie internetowej. Próbowałbym unikać definiowania oddzielnych stylów dla poszczególnych elementów strony.

Jeśli celem klasy CSS na elemencie jest kontrolowanie stylu elementów w formularzu, można dodać atrybut klasy do istniejącego elementu <fieldset/>, który domyślnie zawiera dowolną postać w stronach generowanych przez ASP.NET. MVC. Klasa CSS w formularzu jest rzadko potrzebna.

+4

Masz oczywiście rację, ale ta sprawa jest inna. Szukałem sposobu na określenie metadanych dla kilku wtyczek jquery. Zwykle robi się to poprzez niewłaściwe użycie atrybutu klasy. –

+13

Możesz zasugerować najlepsze praktyki, ale jeśli mam szablon, który używa css w formularzu, nie zamierzam przejść szablon, aby był "poprawny". Rzeczywistość jest taka, że ​​klient nie zapłaci więcej, ponieważ zrobiłeś to, co trzeba, przez css ... –

+1

@ ChristianPayne Mogą być zmuszeni zapłacić więcej w przyszłości, ponieważ tego nie zrobiłeś. –

Powiązane problemy