none
asp:Repeater problemas con el switch(Checkbox) en <label for="id_input"></label> RRS feed

  • Pregunta

  • Buenas a todos, estoy ocupando el siguiente ejemplo para poder maquillar mis checkbox.

    El problema surge cuando intento ocupar el Repeater:

    <!-- Default switch -->
    <asp:Repeater ID="id_repeater" runat="server">
        <ItemTemplate>
            <div class="col-sm-12 col-xs-12" style="margin-top:10px;">
                <div class="form-group">
                <div class="col-sm-4 col-xs-4">
                    <input  id="ID_INPUT" class="cmn-toggle cmn-toggle-round" type="checkbox" runat="server" />
                    <label for="ID_INPUT"></label>
                </div>
                <div class="col-sm-8 col-xs-8">
                    <asp:Label ID="Label2" runat="server" Text='<%# Eval("va_nom_fun") %>'></asp:Label>
                </div>
                </div>
            </div>
        </ItemTemplate>
    </asp:Repeater>

    Cuando ejecuto el programa(Solucion) la ID del <Input> se cambia queda algo asi

    <input name="id_permiso$ctl00$ID_INPUT" type="checkbox" id="rpt_permiso_ctl00_ID_INPUT" class="cmn-toggle cmn-toggle-round">

    y por lo tanto el <label for="ID_INPUT"></label>   Queda inutilizable y es necesario para que pueda hacer el efecto CSS de Switch..

    intente poner id='<%# Eval("va_cod_igo") %>'   pero al parecer no se puede hacer eso

    alguna ayuda o sugerencia porfavor

    domingo, 13 de enero de 2019 7:02

Respuestas

  • No puedes controlar el ID que asp.net genera cuando un control esta dentro de otro componente, si quisiras mayor control en el html deberias ir pensando pasarte a asp.net mvc.

    Aunque creo que en este caso podrias usar el evento ItemDataBound, el cual se produce por cada item que se crea en el repeater al asignarle el datasource

    Using Repeater ItemDataBound event in ASP.Net example

    Con este evento podrias acceder al contorl usando FindControl() y asignar la propiedad, pero esto solo funciona con controles que sean de asp.net, por lo que deberas agregarle el runat=server

    <label for="ID_INPUT" runat="server"></label>
    
    protected void OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
    
            RepeaterItem item = e.Item;
    
            var label1 = (item.FindControl("ID_INPUT") as ??);
    
        }
    }

    Pero el problema que veo no veo que exista un Html Control para el label

    HtmlControls Namespace

    Quizas debas usar un <asp:Label > y asignar la propiedad AssociatedControlID

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 14 de enero de 2019 11:07

Todas las respuestas

  • Creo que se debería poder resolver así:

    <label for="<%=ID_INPUT.ClientId%>"></label>

    pero nunca el probado el ClientId dentro de un Repeater, espero que lo procese correctamente.

    domingo, 13 de enero de 2019 11:41
  • acabo de intentarlo por razones desconocidas me lanza un error y no puedo hacer uso de 

    id="ID_INPUT"

    al parecer dentro del repeater queda inutilizable por que me salta un error aun del lado del servidor no lo puedo llamar para por ejemplo no puedo hacer el:

    id(ID_INPUT.Cheked!=false)

    domingo, 13 de enero de 2019 20:56
  • No puedes controlar el ID que asp.net genera cuando un control esta dentro de otro componente, si quisiras mayor control en el html deberias ir pensando pasarte a asp.net mvc.

    Aunque creo que en este caso podrias usar el evento ItemDataBound, el cual se produce por cada item que se crea en el repeater al asignarle el datasource

    Using Repeater ItemDataBound event in ASP.Net example

    Con este evento podrias acceder al contorl usando FindControl() y asignar la propiedad, pero esto solo funciona con controles que sean de asp.net, por lo que deberas agregarle el runat=server

    <label for="ID_INPUT" runat="server"></label>
    
    protected void OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
    
            RepeaterItem item = e.Item;
    
            var label1 = (item.FindControl("ID_INPUT") as ??);
    
        }
    }

    Pero el problema que veo no veo que exista un Html Control para el label

    HtmlControls Namespace

    Quizas debas usar un <asp:Label > y asignar la propiedad AssociatedControlID

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 14 de enero de 2019 11:07