Как применить CSS к внутренним элементам элемента управления ASP.NET CheckBoxList

Мне нужно манипулировать атрибутами элемента label внутри элемента управления ASP.NET CheckBoxList. Каждая метка флажка должна иметь другой класс. Лучшей альтернативой, которую я вижу, является применение классов с помощью jQuery постфактум. Кто-нибудь знает лучший метод?

Однако я нашел этот пост весьма полезным, добавив атрибут в элемент списка только оборачивает элемент input и элемент label в тег span с обозначенными атрибутами.


person smartcaveman    schedule 01.09.2011    source источник
comment
Я думаю, что здесь нужно немного больше информации. Почему для каждого флажка нужен отдельный элемент управления? Являются ли они определенным списком флажков, который никогда не изменится? Если нет, то какие правила определяют, какой флажок получает какой класс? Если да, то почему вы используете элемент управления checkboxlist?   -  person mccow002    schedule 10.11.2011


Ответы (4)


Возможно, вы уже думали об этом, но вы можете попробовать использовать адаптеры управления ASP.NET. Адаптеры элементов управления позволяют изменять HTML-разметку, создаваемую элементами управления ASP.NET.

Ознакомьтесь со ссылками ниже для ознакомления:

person Martijn B    schedule 10.11.2011

Вариант второго ответа Билли, но без кода на стороне сервера:

Назначьте класс самому checkboxlist

<asp:CheckBoxList runat="server" id="MyCBL" CssClass="MyClass"></asp:CheckBoxList>

Любой CSS, который вы применяете к родительскому элементу (в данном случае к списку флажков, который отображается в виде таблицы), можно передать его дочерним элементам:

<style>
    .MyClass label {color: Blue}
    .MyClass input[type='checkbox'] {background-color: Red}
</style>
person Barrie A Sargent    schedule 25.10.2013
comment
Хороший подход, если вы сами пишете код CSS. Проблема здесь в том, что вы можете указать, например, классы Twitter Bootstrap, что невозможно сделать таким образом. - person Daniel; 30.06.2019

Это может быть своего рода хак, так как я не разбираюсь в CSS, но у меня это сработало.

Сделайте для каждого из элементов списка в списке флажков, добавьте атрибут ID к каждому из них. Это присвоит идентификатор каждому диапазону, в который заключен тег label. Вы захотите назначить разные идентификаторы для каждого элемента списка, поскольку вы сказали, что каждому из них нужен другой класс.

For Each li As ListItem In Me.CheckBoxList1.Items
    li.Attributes.Add("id", "mySpanID")
Next

Теперь вам нужно добавить стиль CSS для этого идентификатора, чтобы он применялся к тегу label.

<style>
    #mySpanID label { color: Blue }
</style>

Другой способ - сделать то же самое, что и выше, но назначить класс каждому элементу списка и применить класс только к тегу метки.

Назначьте класс каждому элементу списка

For Each li As ListItem In Me.CheckBoxList1.Items
    li.Attributes.Add("class", "MyClass")
Next

А затем добавьте свой CSS

<style>
    .MyClass label {color: Blue}
</style>
person Billy    schedule 10.11.2011

Поэтому я вижу несколько разных способов сделать это. Первый — через классы css.

Код сервера:

List<ListItem> items = new List<ListItem>();
ListItem item1 = new ListItem("test", "test");
item1.Attributes.Add("class", "specificClass1");
items.Add(item1);
//repeat the last three lines as needed
checkBoxList.Items.AddRange(items.ToArray());

Это приведет, как вы сказали, к диапазону, содержащему метку и элементы ввода. Итак, вы css были бы:

.specificClass1 label
{
    //Your specific css
}

и вы будете повторять это по мере необходимости.

Другим подходом может быть подход jQuery. Я не вижу ничего плохого в этом подходе, но в своем вопросе вы упоминаете этот подход негативно. Так что я предполагаю, что вы знаете, как это сделать, но просто не хотите. Я просто упоминаю об этом, чтобы сказать, что это неплохой подход, и если ничего не помогает, вы можете пересмотреть свое решение :).

person mccow002    schedule 10.11.2011
comment
Будет ли это сохраняться после обратной публикации или частичной обратной публикации? - person aggietech; 02.04.2012