Cercare controlli innestati in ASP.NET

Antonio Esposito

è come mischiare la lana con la pecora

Cercare controlli innestati in ASP.NET

  • Comments 2

Ciao  tutti

vi è mai capitato di dover cercare un controllo in una pagina ASP.NET e non lo trovate perchè perso tra master, listview/gridview varie che avete usato?!?!?!

Io ho risolto creando una Extension alla classe Control così che tutti i controlli e le pagine lo abbiano a disposizione per cercare.
Unico avvertimento, attenzione a quando lo usate per cercare controlli interni ad un listview o ad un gridview perchè il metodo tornerà sempre solo il primo dei tanti.

    public static class Extensions
    {
        public static Control FindNestedControl(this Control control, string ID)
        {
            if (control == null || string.IsNullOrEmpty(ID))
                return null;
            else if (control.ID == ID)
                return control;
            else if (control.Controls.Count > 0)
            {
                foreach (Control c in control.Controls)
                {
                    var found = c.FindNestedControl(ID);
                    if (found != null)
                        return found;
                }
                return null;
            }
            else
                return null;
        }
    }
 

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment
  • Post
  • Ma il metodo Control.FindControl non ha lo stesso comportamento?

  • sfortunatamente no, cerca i controlli nel nuo namingcontainer (in pratica in .Controls)

    se cerchi infatti un controllo che è a sua volta annidato (tipo un gridview) non lo trovi

    qui il ricorsivo ti da una mano, ma bisogna stare attenti agli id multipli in scenari come appunto un gridview dove lo stessso link è ripetuto ma con CommandName e CommandArgument diversi.

    Eventualmente ci si potrebbe aggiungere una versione che verifica appunto queste proprietà, ma dovrebbe essere tipizzata

Page 1 of 1 (2 items)