Почему ASP.Net RadioButton и CheckBox представляют в Промежутке?

Это работало для меня, когда многие из этих других предметов не:

.slick-prev:before {
  content: url('your-arrow.png');
}
.slick-next:before {
  content: url('your-arrow.png');
}
53
задан Mark 15 June 2009 в 06:32
поделиться

4 ответа

Веб-элементы управления в пространстве имен System.Web.UI.WebControls могут отображаться по-разному в разных браузерах. Вы не можете рассчитывать на то, что они всегда будут отображать одни и те же элементы. Они могут добавлять все, что, по их мнению, необходимо для работы в конкретном браузере.

Если вы хотите иметь какой-либо контроль над тем, как элементы управления отображаются в виде HTML, вы должны использовать элементы управления в System.Web Вместо этого .UI.HtmlControls . То есть:

<input type="checkbox" id="CheckBox1" runat="server" class="myClass" />
<input type="radio" name="RadioButton1" runat="server" class="myClass" />
<input type="text" id="TextBox1" runat="server" class="myClass" />

Они будут отображаться так же, как соответствующий элемент html, без добавления дополнительных элементов. Это, конечно, означает, что вам придется взять на себя ответственность за совместимость браузера, в отличие от элемента управления. Кроме того, эти элементы управления не обладают всеми функциями элементов управления в пространстве имен WebControls .

49
ответ дан 7 November 2019 в 08:18
поделиться

Every WebControl by default renders as a tag, plus any custom rendering that the control author adds.

One of the first things you usually do when you write a custom WebControl is to override the "TagKey" property to render a div, or something besides a span. The default value of this property is HtmlTextWriterTag.Span.

You could subclass your checkbox items and override the TagKey property to render something else, but then you have to deal with making all your checkboxes into your own version.

5
ответ дан 7 November 2019 в 08:18
поделиться

Я столкнулся с этой проблемой и пытаюсь решить ее с помощью адаптеров управления.

См. здесь , где приведен пример того, как это сделать со списком переключателей. ] Я получил это как мой RadioButtonAdaptor-

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.Adapters;

public class RadioButtonAdapter : WebControlAdapter
{
    protected override void Render(HtmlTextWriter writer)
    {
        RadioButton targetControl = this.Control as RadioButton;

        if (targetControl == null)
        {
            base.Render(writer);

            return;
        }

        writer.WriteBeginTag("input");
        writer.WriteAttribute("type", "radio");
        writer.WriteAttribute("name", targetControl.GroupName);
        writer.WriteAttribute("id", targetControl.ClientID);            

        if (targetControl.CssClass.Length > 0)
        {
            writer.WriteAttribute("class", targetControl.CssClass);
        }      

        writer.Write(" />");

    }
}

И это добавлено в файл моего браузера-

<browser refID="Default">
        <controlAdapters>            
            <adapter controlType="System.Web.UI.WebControls.RadioButton"
               adapterType="RadioButtonAdapter" />
        </controlAdapters>
</browser>

Конечно, у этого есть некоторые недостатки. Наряду с теми, которые упомянуты в по ссылке выше , вы также теряете функциональность, если не имплементируете все (приведенный выше код не позволяет установить переключатель). Есть несколько адаптеров управления, дружественных к CSS, но они не охватывают управление с помощью переключателя. Можно использовать Reflector для получения адаптера управления по умолчанию в качестве отправной точки.

3
ответ дан 7 November 2019 в 08:18
поделиться

Это тоже сводило меня с ума, пока я не нашел свойство inputAttributes.

Например, вот как добавить класс прямо в элемент управления флажком без всякой ерунды диапазона:

myCheckBoxControl.InputAttributes.Add("class", "myCheckBoxClass")
113
ответ дан 7 November 2019 в 08:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: