2012-09-30 5 views
1

Je suis nouveau chez ASP.NET mais quelque chose qui me pose continuellement problème est de trouver des contrôles serveur imbriqués, surtout lorsqu'ils sont imbriqués.Impossible de trouver le contrôle serveur

Dans ce cas, voici mon inscription page vers le haut jusqu'à ce que le contrôle du serveur que je veux:

Par souci de lisibilité, les seules choses que j'ai supprimé quelques éléments HTML . J'essaie d'accéder à 'prénom'. J'ai essayé tous les éléments suivants sans aucune chance, (TextBox premier est toujours à venir nul).

TextBox first = (TextBox)Page.Master.FindControl("MainContent").FindControl("firstName"); 
TextBox first = (TextBox)Page.FindControl("firstName"); 
TextBox first = (TextBox)RegisterUserWizardStep.FindControl("firstName"); 
TextBox first = (TextBox)RegisterUser.FindControl("firstName"); 

Apprécierait l'aide, merci!

+0

J'ai oublié d'ajouter que im en utilisant une page maître et tout le contenu ci-dessus est dans un espace réservé –

Répondre

1

Essayez ce morceau de code:

TextBox first = (TextBox) RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("firstName"); 
+0

SUCCÈS! Je vous remercie! Cela vous dérange-t-il d'expliquer un peu comment vous êtes arrivé à cela? C'est un problème récurrent que j'ai dans mes pages. –

+0

Il existe différentes façons de trouver un contrôle imbriqué. Pour CreateUserWizard, c'est un moyen d'accès, http://msdn.microsoft.com/en-us/library/ms178342%28v=vs.100%29.aspx –

+0

Un UpVote avec l'acceptation de cette réponse serait très encourageant s'il vous a vraiment aidé. Merci –

2

Souvent, vous devrez peut-être faire une recherche de contrôle récursive. Tout d'abord, ajouter cette méthode à votre page:

private Control FindControlRecursive(Control Root, string Id) 
{ 
    if (Root.ID == Id) 
     return Root; 
    foreach (Control Ctl in Root.Controls) 
    { 
     Control FoundCtl = FindControlRecursive(Ctl, Id); 
     if (FoundCtl != null) 
      return FoundCtl; 
    } 
    return null; 
} 

Maintenant, pour trouver la commande, appelez le:

TextBox firstName = (TextBox)FindControlRecursive(this, "firstName"); 
+0

réponse similaire http://stackoverflow.com/questions/6572255/find-control-in-class-cannot-find-control. Essayez de donner un lien plutôt que de le poster .. – pordi

+0

Pourquoi voudrais-je donner un lien quand je peux juste donner une réponse? –

+0

Parce que cela permettrait de garder l'information centralisée. Tout le point de Stackoverflow .. Nyways .. ce la réponse que je cherchais .. THanks Mate – pordi

Questions connexes