2012-05-22 9 views
18

In asp.net, se si utilizza un attributo personalizzato, di solito viene visualizzato così com'è.Attributo di casella di controllo Asp.net e dati HTML

Considerando questo markup (nota: attributi quali id, name e for state rimosse in tutti gli esempi come ID generata/nomi sono dettagliato):

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

è reso in asp.net come:

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

Cioè, asp.net mantiene data-foo intatta.

Casella di solito sono resi in questo modo:

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

rende come:

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

Ma se si aggiunge un attributo personalizzato su una casella di controllo:

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

rende come :

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

Come si può vedere, una span in rendering per contenere l'attributo. Questo succede anche se si aggiunge l'attributo nel codice. Questo non succede con nessun altro HtmlControl, AFAIK.

Qualcuno sa perché questa estensione è visualizzata per contenere l'attributo?

Esiste comunque il rendering dell'attributo nel tag di input?

+0

interessante .. Solo per curiosità, che cosa stai usando l'attributo extra per \ –

risposta

20

io non sono sicuro perché è reso con una campata, ma suppongo che è possibile aggiungere l'attributo direttamente al input elemento del CheckBoxin code-behid come questo:

myCheckBox.InputAttributes.Add(...) 

Re link Ference:

Aggiornamento

Un elemento padre aggiuntivo viene utilizzato, in modo che gli attributi che si applicano a un CheckBox possono riguardare sia il input e il testo. Suppongo che sia un span (e non uno div), perché è un elemento in linea , che lo rende più comodo da utilizzare in diversi scenari.

link di riferimento:

+0

Nizza, non ho mai notato questo InputAttributes prima. Ho provato Attributes.Add, che non ha funzionato. – Andre

4

Questo è il modo in cui il motore di rendering crea il controllo CheckBox, non c'è molto da fare al riguardo.

Qualcosa che potreste fare è creare un ingresso runat="server".

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

Un'altra opzione è l'aggiunta l'attributo data-foo utilizzando jQuery sul carico documento

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

solo aggiungere un altro metodo che uso quando tutto il resto fallisce, si può sempre usare un controllo letterale e renderlo rendere qualsiasi cosa volere. È necessario fare un po 'più di lavoro quando si gestisce il postback, ma a volte questo è l'unico modo per ottenere l'html necessario.

Markup:

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

Codebeside:?

myLiteral.Text = string.Format("<input type=\"checkbox\" data-foo=\"{0}\" /><label>Normal</label>", value)