Как удалить тег span из WebControl при отображении - PullRequest
16 голосов
/ 01 февраля 2010

При использовании ASP.NET CheckBox (и в нашем случае, унаследованном от CheckBox) он отображает диапазон вокруг элемента управления ввода флажка, этот элемент управления диапазона влияет на сценарии jQuery.

Возможно ли удалить этот диапазон при рендеринге?

Ответы [ 15 ]

1 голос
/ 01 февраля 2010

Вы можете использовать элемент управления input / checkbox напрямую, если вам не нужна метка, или можете поставить его самостоятельно:

<input type="checkbox" id="CheckBox1" runat="server" />
<label for="CheckBox1">My Label</label>

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

0 голосов
/ 27 октября 2018

У меня только что была эта проблема, и я использовал ответ Джона, который хорош, и он работает. Недостатком является то, что ваш класс определен в коде, а не в разметке.

Итак, я взял ответ и сделал прогаматический способ получить все атрибуты для элемента управления, скопировать их в InputAttributes и удалить эти скопированные атрибуты из атрибутов.

Обратите внимание, что хотя это происходит от RadioButton, вы можете использовать этот метод для расширения любого элемента управления, такого как метки или флажки.

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

namespace Hidistro.UI.Common.Controls
{
    /// <summary>
    /// Just like a normal RadioButton, except that the wrapped span is disabled.
    /// </summary>
    public class CleanRadioButton : RadioButton
    {
        protected override void Render(HtmlTextWriter writer)
        {
            List<string> keysToRemove = new List<string>();

            foreach (object key in Attributes.Keys)
            {
                string keyString = (string)key;
                InputAttributes.Add(keyString, Attributes[keyString]);
                keysToRemove.Add(keyString);
            }

            foreach (string key in keysToRemove)
                Attributes.Remove(key);

            base.Render(writer);
        }
    }
}

Таким образом, все, что вам нужно сделать, это следующее, и он будет выводить теги без интервала.

<namespace:CleanRadioButton class="class1" />
<namespace:CleanRadioButton class="class2" />

Вывод HTML: (обратите внимание, что «сгенерированный» генерируется автоматически)

<input id="generated" type="radio" name="generated" value="generated" class="class1">
<input id="generated" type="radio" name="generated" value="generated" class="class2">
0 голосов
/ 28 августа 2017
                <div class="onoffswitch">
                     <asp:CheckBox ID="example1" runat="server" AutoPostBack="true" OnCheckedChanged="chkWifiRequired_CheckedChanged" CssClass="aspNetDisabled onoffswitch-checkbox"/>
                    <label class="onoffswitch-label" for='<%= example1.ClientID.ToString() %>'>
                        <span class="onoffswitch-inner"></span>
                        <span class="onoffswitch-switch"></span>
                    </label>
                </div>
            /* remove the relative spam involving inputs disabled */
            $('input[name=""]').parent('.aspNetDisabled').each(function () {
                var $this = $(this);
                var cssClass = "onoffswitch-checkbox";
                $('input[name=""]').addClass(cssClass).unwrap().parent('label[for],span').first().addClass('onoffswitch-checkbox');
            });

Это позволит вам использовать флажок в обычном режиме, по-прежнему вызывать код на стороне сервера и использовать переключатель из начальной загрузки. (Я использую тему Inspina, но она должна быть в том же формате для других переключателей)

0 голосов
/ 19 ноября 2013

Интересно, есть причина, по которой упомянуто № 1:

public MyControl() : base(string.Empty)

я получил это чтение http://aspnetresources.com/blog/stripping_span_from_webcontrol, о котором упоминал flaviotsf

0 голосов
/ 22 сентября 2012

Попробуйте добавить в свой класс конструктор, который выглядит следующим образом:

public MyControl() : base() 
{
}

Если вы заметили, элементы управления будут отображаться как интервалы по умолчанию, поскольку именно это использует «WebControl» (если вы используете Reflector):

protected WebControl() : this(HtmlTextWriterTag.Span) { }

Ссылка: http://aspnetresources.com/blog/stripping_span_from_webcontrol

...