ASP.NET ¿Existe alguna forma mejor de encontrar controles que estén dentro de otros controles?

Actualmente tengo un menú desplegable dentro de un control ascx. Necesito “encontrarlo” dentro del código detrás de otro archivo ascx que está en la misma página. Su valor se usa como un parametro a un ObjectDataSource en ascx # 2. Actualmente estoy usando esta fea pieza de código. Funciona, pero me doy cuenta de que si la orden conrtol cambiara o varias otras cosas, no estaría donde estoy esperando. ¿Alguien tiene algún consejo sobre cómo debería estar haciendo esto?

if(Page is ClaimBase) { var p = Page as ClaimBase; var controls = p.Controls[0].Controls[3].Controls[2].Controls[7].Controls[0]; var ddl = controls.FindControl("ddCovCert") as DropDownList; } 

¡¡Gracias y feliz año nuevo!! ~ ck en San Diego

En general, implemento una función “FindInPage” o FindControl recursivo cuando tiene muchas funciones de control para hacer, donde simplemente le pasa un control y desciende recursivamente desde el árbol de control.

Si se trata de algo único, considere exponer el control que necesita en su API para que pueda acceder a él directamente.

 public static Control DeepFindControl(Control c, string id) { if (c.ID == id) { return c; } if (c.HasControls) { Control temp; foreach (var subcontrol in c.Controls) { temp = DeepFindControl(subcontrol, id); if (temp != null) { return temp; } } } return null; } 

Exponga una propiedad en la clase de control del usuario que devolverá el valor que necesita. Deje que la página acceda a la propiedad.

Solo el control del usuario debe saber qué controles hay dentro de él.

Intereting Posts