Флажок Asp.net и атрибут данных html

В asp.net, если вы используете пользовательский атрибут, обычно он отображается как есть.

Учитывая эту разметку (note: такие атрибуты, какid, name а такжеfor были удалены во всех примерах, поскольку их сгенерированные идентификаторы / имена являются многословными):

<asp:TextBox runat="server" data-foo="bar" />

Отображается в asp.net как:

<input type="text" data-foo="bar" />

То есть asp.net хранитdata-foo нетронутым.

Флажок обычно отображается так:

<asp:CheckBox runat="server" Text="Normal" />

Представляет как:

<input type="checkbox" />
<label>Normal</label>

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

<asp:CheckBox runat="server" Text="Custom attribute" data-foo="bar"  />

Это выглядит как:

<span data-foo="bar">
    <input type="checkbox" />
    <label>Custom attribute</label>
</span>

Как вы можете видеть, интервал рендеринга для хранения атрибута. Это также происходит, если вы добавляете атрибут в коде. Этого не происходит с любым другим HtmlControl, AFAIK.

Кто-нибудь знает, почему этот диапазон отображается для хранения атрибута?

Есть ли способ визуализировать атрибут во входном теге?

 Nick Rolando22 мая 2012 г., 19:14
Интересно .. Просто любопытно, для чего вы используете дополнительный атрибут? \

Ответы на вопрос(4)

CheckBox контроль, с этим ничего не поделаешь.

Что-то, что ты мог сделать, это создатьrunat="server" вход.

<input id="myInput" runat="server" type="checkbox" data-foo="bar"/>
<label>Custom attribute</label>

Другой вариант - добавлениеdata-foo атрибут, использующий jquery при загрузке документа

$(function(){
    $('span[data-foo]').each(function(){
        var $span = $(this);
        var value = $span.data('foo');
        $span.find('input').data('foo',value);        
    });
})

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

Markup:

<asp:Literal ID="myLiteral" runat="server"/>

Codebeside:

myLiteral.Text = string.Format("<input type=\"checkbox\" data-foo=\"{0}\" /><label>Normal</label>", value)
Решение Вопроса

почему он отображается с пролетом, но я полагаю, вы можете добавить атрибут непосредственно кinput элементCheckBox в коде бехид так

myCheckBox.InputAttributes.Add(...)

Ссылочные ссылки:

http: //msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox.inputattributes.asphttp: //forums.asp.net/p/541142/541562.asphttp: //msdn.microsoft.com/en-us/library/system.web.ui.attributecollection.add.asp

Обновит

Используется дополнительный родительский элемент, так что атрибуты, которые вы применяете кCheckBox может влиять как наinput и текст. Я полагаю, этоspan (а неdiv), потому что этоinline element, что делает его более удобным для использования в различных сценариях.

Ссылочные ссылки:

http: //en.wikipedia.org/wiki/Span_and_div#Differences_and_default_behaviohttp: //learnwebdesignonline.com/span-di
 Ortiga22 мая 2012 г., 19:23
Замечательно, я никогда раньше не отмечал эти InputAttributes. Я попробовал Attributes.Add, который не работал.

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

<asp:CheckBox runat="server" data-foo="bar" />

Сейчас наOnCheckedChanged Мне нужно получить это значение, и в моем методе я получилsender объект.

protected void chk1_CheckedChanged(object sender, EventArgs e)
{
    CheckBox myControl = (CheckBox)sender;
    string value = myControl.Attributes["data-foo"].ToString();

}

Надеюсь, это поможет кому-то

Ваш ответ на вопрос