Як я можу додати атрибут класу до елемента HTML, згенерованого HTML-помічниками MVC?


188

ASP.NET MVC може генерувати елементи HTML, наприклад @Html.ActionLink(), за допомогою HTML Helpers @Html.BeginForm()тощо.

Я знаю, що я можу вказати атрибути форми, створивши анонімний об'єкт і передати цей об’єкт для (четвертого в цьому випадку) htmlAttributesпараметра, де вказати idелемент для:

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

А як же classатрибут? Очевидно, що це не працює:

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

Оскільки це просто викидає випадкові синтаксичні помилки, коли запитується мій погляд, оскільки він очікує чогось іншого після зустрічі з ключовим словом C # class.

Я також спробував:

new { _class = "myclass"}

і

new { class_ = "myclass"}

Але вони також не спрацювали, оскільки підкреслення замінюють тире .

Я знаю, що я можу так само добре писати HTML-елементи вручну або загортати форму всередині <div class="myClass">, але мені все ж цікаво знати, як це робити.

Відповіді:


348

Для того , щоб створити анонімний тип (або будь-який інший типу) з властивістю , яке має зарезервоване ключове слово в якості свого імені в C #, ви можете випереджати ім'я властивості з символом, @:

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

Для VB.NET цей синтаксис буде виконаний за допомогою точки ., яка в цій мові є синтаксисом за замовчуванням для всіх анонімних типів :

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

Аналізатор недостатньо розумний, IMO, якщо він потребує цього підказки, враховуючи контекст, який він знаходиться в цьому пункті коду.
toddmo

3

Поточна найкраща практика розробки CSS полягає у створенні більш загальних селекторів з модифікаторами, які можна застосовувати якомога ширше на всьому веб-сайті. Я б намагався уникати окремих стилів для окремих елементів сторінки.

Якщо метою класу CSS для <form/>елемента є управління стилем елементів у формі, ви можете додати атрибут класу існуючий <fieldset/>елемент, який інкапсулює будь-яку форму за замовчуванням на веб-сторінках, згенерованих ASP.NET MVC. Клас CSS на бланку рідко необхідний.


4
Ви, звичайно, праві, однак цей випадок інший. Я шукав спосіб вказати метадані для кількох плагінів jquery. Зазвичай це робиться шляхом неправильного використання атрибута класу.
Адріан Григоре

13
Ви можете запропонувати найкращі практики, але якщо у мене є шаблон, який використовує css у формі, я не збираюся розсилати шаблон, щоб зробити його "правильним". Реальність полягає в тому, що клієнт не збирається платити більше, тому що ви зробили правильно css ...
Крістіан Пейн

1
@ChristianPayne Вони можуть бути змушені платити більше у майбутньому, тому що ви цього не зробили.
Ян Варбуртон

1
Я відповів голосом цю відповідь, оскільки вона не відповідає на запитання. Більш відповідна відповідь спочатку дасть відповідь на це питання, а потім дасть рекомендації щодо найкращої практики.
Бен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.