tag route pass parameter net mvc form for data asp all asp.net asp.net-3.5 asp.net-4.0

asp.net - route - form asp-action



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

En asp.net, si usa un atributo personalizado, generalmente se procesa como está.

Teniendo en cuenta este marcado ( nota: los atributos como id , name y for se eliminaron en todos los ejemplos, ya que sus id / names 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 intactos los data-foo .

La casilla de verificación se suele mostrar de esta manera:

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

Se rinde 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 rinde como:

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

Como puede ver, un intervalo en renderizado para contener el atributo. Esto también sucede si agrega el atributo en el código detrás. Esto no sucede con ningún otro HtmlControl, AFAIK.

¿Alguien sabe por qué este intervalo se representa para mantener el atributo?

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


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

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

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

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

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


No estoy seguro de por qué se procesa con un intervalo, pero supongo que puede agregar el atributo directamente al elemento de input del CheckBox en el código de este modo:

myCheckBox.InputAttributes.Add(...)

Enlaces de referencia:

Actualizar

Se utiliza un elemento padre adicional, de modo que los atributos que aplique a un CheckBox pueden afectar tanto la input como el texto. Supongo que es un span (y no un div ), porque es un elemento en línea , lo que lo hace más cómodo de usar en diferentes escenarios.

Enlaces de referencia:


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

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

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

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


Solo para agregar otro método que utilizo cuando todo lo demás falla, siempre puedes usar un control literal y hacer que renderice lo que quieras. Necesita hacer un poco más de trabajo 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"/>

Codebeside:

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