2009-12-31 5 views
1

J'ai actuellement une liste déroulante à l'intérieur d'un contrôle ascx. J'ai besoin de "trouver" à l'intérieur du code derrière un autre ascx qui est sur la même page. Sa valeur est utilisée en tant que param à ObjectDataSource sur ascx # 2. J'utilise actuellement ce vilain morceau de code. Cela fonctionne mais je me rends compte que si l'ordre de conrtol devait changer ou d'autres choses, ce ne serait pas où je m'attends. Quelqu'un a-t-il des conseils sur la façon dont je devrais le faire?ASP.NET Existe-t-il un meilleur moyen de trouver des contrôles dans d'autres contrôles?

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; 
} 

Merci et bonne année !! ~ ck dans San Diego

Répondre

6

Généralement, j'implémente une fonction FindInPage ou une fonction FindControl récursive quand vous avez beaucoup de contrôle à faire, où vous passeriez simplement un contrôle et descendriez récursivement l'arbre de contrôle.

Si c'est juste une chose unique, pensez à exposer le contrôle dont vous avez besoin dans votre API afin que vous puissiez y accéder directement.

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; 
} 
+0

doux. J'utilise beaucoup et ça marche plutôt bien. Une solution simple. – Hcabnettek

6

Expose une propriété de la classe de contrôle utilisateur qui renverra la valeur dont vous avez besoin. Laissez la page accéder à la propriété.

Seul le contrôle utilisateur doit savoir quelles commandes sont à l'intérieur de celui-ci.

Questions connexes