Casilla de verificación Asp.net y atributo de datos html

En asp.net, si usa un atributo personalizado, generalmente se representa tal cual.

Teniendo en cuenta este marcado (Nota: atributos tales como id, name y for fueron eliminados en todos los ejemplos ya que sus id/nombres generados son detallados):

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

Se representa en asp.net como:

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

Es decir, asp.net mantiene data-foo intacto.

La casilla de verificación generalmente se representa así:

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

Se renderiza como:

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

Pero si agrega un atributo personalizado en una casilla de verificación:

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

Se presenta como:

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

Como puede ver, se representa un lapso para contener el atributo. Esto también sucede si agrega el atributo en el código subyacente. Esto no sucede con ningún otro HtmlControl, AFAIK.

¿Alguien sabe por qué este lapso se representa para contener el atributo?

¿Hay alguna forma de representar el atributo en la etiqueta de entrada?

preguntado el 22 de mayo de 12 a las 18:05

Interesante... Solo por curiosidad, ¿para qué estás usando el atributo extra?\ -

4 Respuestas

No estoy seguro de por qué se representa con un lapso, pero supongo que puede agregar el atributo directamente al input elemento de la CheckBox en código oculto Me gusta esto:

myCheckBox.InputAttributes.Add(...)

Enlaces de referencia:

Noticias

Se utiliza un elemento principal adicional, de modo que los atributos que aplica a un CheckBox puede afectar tanto a la input y el texto supongo que es un span (y no un div), porque es un elemento en línea, lo que lo hace más conveniente de usar en diferentes escenarios.

Enlaces de referencia:

contestado el 22 de mayo de 12 a las 18:05

Bien, nunca antes había notado este InputAttributes. Probé Attributes.Add, que no funcionó. - Ortiga

Esta es la forma en que el motor de render construye el CheckBox control, no hay mucho que hacer al respecto.

Algo que podrías hacer es crear un runat="server" entrada.

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

Otra opción es agregar el data-foo atributo usando jquery en la carga del documento

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

contestado el 22 de mayo de 12 a las 18:05

Solo para agregar otro método que uso cuando todo lo demás falla, siempre puede usar un control literal y hacer que represente lo que quiera. Debe trabajar un poco más al manejar la devolución de datos, pero a veces esta es la única forma de obtener el html que necesita.

Margen:

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

Código junto a:

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

respondido 28 mar '13, 15:03

Si está intentando acceder a ese atributo en el evento de clic, puede hacerlo emitiendo el control. Por ejemplo, tengo una casilla de verificación y le asigno un atributo personalizado como lo hizo usted

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

Ahora en adelante OnCheckedChanged Necesito obtener ese valor y en mi método obtuve un sender objeto.

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

}

Espero que esto ayude a alguien

Respondido 21 Feb 19, 18:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.