Un metodo FindControl ricorsivo per pagine ASP.NET

In alcuni casi è necessario recuperare un controllo annidato all'interno di una serie di altri, senza poter sapere a prori quale sia esattamente il suo controllo genitore. In casi come questo è necessario scrivere una funzione che faccia la scansione, in maniera ricorsiva, dell'intero albero dei controlli, così da poter essere utilizzato, ad esempio, sia all'interno di pagine che siano basate su Master Page, sia in altri contesti:

public Control FindControlRecursive(Control owner, string controlID)
{
  Control myControl = null;

  // faccio un ciclo su tutti i controlli
  if (owner.Controls.Count > 0)
  {
    foreach (Control c in owner.Controls)
    {
      myControl = FindControlRecursive(c, controlID);

      if (myControl != null)
        return myControl;
    }
  }

  // ho trovato il controllo, lo restituisco
  if (controlID.Equals(owner.ID))
    return owner;

  return null;
}

// recupero un controllo Label chiamato Title
Label footer = FindControlRecursive(this, "Title") as Label;