none
Como acceder a un elemento dinamico RRS feed

  • Pregunta

  • Buenas, estoy desarrollando una aplicación en asp.net y necesito acceder a un control dinámico, hasta ahora tengo lo siguiente pero me devuelve un null porque no encuentra el objeto.

    Os pongo un ejemplo:

    <label id="cant_1_1" runat="server" text="" height="20">H</label>
    
    <label id="cant_1_2" runat="server" text="" height="20">O</label>
    
    <label id="cant_1_3" runat="server" text="" height="20">L</label>
    
    <label id="cant_2_1" runat="server" text="" height="20">A</label>
    
    <label id="cant_2_2" runat="server" text="" height="20">!</label>
    


     Estas etiquetas se crean de forma dinamica poniendo como id un texto fijo + un identificador de posicion.

    El caso es que aun teniendo el runat="server" desde el correspondiente no puedo acceder al elemento ya que no puedo poner Id como tal sino que para que os hagais una idea si quiero acceder a la etiqueta "cant_1_3" para saber que tiene como valor L pondriamos algo como esto en el cs

    string letra = cant_1_3.InnerText;


    El caso es que yo no se que es "cant_1_3" lo único que se es que es la etiqueta que es identificada por la pos1 y la pos2 que son variables 

    i

    int pos1 = 1; int pos2 = 3; 
    etiqueta = "cant_" + pos1 + "_" + pos2;

    ¿ Alguna sugerencia para recoger este elemento dinamico ?

    Gracias

    jueves, 16 de julio de 2015 12:12

Respuestas

  • para ello debes hacer un FindControl().

    si las etiquetas NO están en un contenedor como un panel haces lo siguiente.

    var etiqueta = this.FindControl("cant_1_3");

    si está dentro de un panel por ejemplo

    var etiqueta = this.Panel1.FindControl("cant_1_3");


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta Veleras jueves, 16 de julio de 2015 20:54
    jueves, 16 de julio de 2015 13:24
    Moderador

Todas las respuestas

  • para ello debes hacer un FindControl().

    si las etiquetas NO están en un contenedor como un panel haces lo siguiente.

    var etiqueta = this.FindControl("cant_1_3");

    si está dentro de un panel por ejemplo

    var etiqueta = this.Panel1.FindControl("cant_1_3");


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta Veleras jueves, 16 de julio de 2015 20:54
    jueves, 16 de julio de 2015 13:24
    Moderador
  • hola

    una duda, porque no usas el <asp:Label > ? porque tiene que ser un html con el runat=server

    es que el label por lo que entiendo no interviene en el post por eso puede que no acceda al control

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta fredsale jueves, 16 de julio de 2015 16:57
    jueves, 16 de julio de 2015 13:39
  • Cierto Leandro. Un label html no entra en el post. Yo entendí que tenia un <asp:Label>. Error mio

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 16 de julio de 2015 13:47
    Moderador
  • Uso label por comodidad a la hora de trabajar con los CSS; de todas formas no necesito que vaya en el post, es una etiqueta que se modifica desde el correspondiente archivo cs, no es una pagina que se envíe a otro lugar y vaya arrastrando esos datos ( entiendo que a eso te refieres con que intervenga en el post ), sino que solo actualiza datos en una base de datos.

    La respuesta me fue muy util, muchas gracias.

    jueves, 16 de julio de 2015 20:58