7
votes

Iterating via des zones de texte dans ASP.NET - Pourquoi cela ne fonctionne-t-il pas?

J'ai 2 méthodes j'ai essayé de parcourir toutes mes zones de texte dans une page ASP.NET. Le premier fonctionne, mais le second ne retourne rien. Pourrait-on vous expliquer pourquoi la seconde ne fonctionne pas?

Ceci fonctionne OK: P> xxx pré>

et le code "ne fonctionne pas": P>

List<string> list = new List<string>();

    foreach (Control control in Controls)
    {
        TextBox textBox = control as TextBox;
        if (textBox != null)
        {
            list.Add(textBox.Text);
        }
    }


1 commentaires

Dans le deuxième lot de code, les contrôles contiennent-ils même quelque chose?


3 Réponses :


9
votes

Votre premier exemple fait un niveau de récursivité, vous obtenez donc des boîtes de texte qui sont plus d'une commande profonde dans l'arbre de contrôle. Le deuxième exemple obtient uniquement des boîtes de texte de niveau supérieur (que vous en avez probablement peu ou aucune).

La clé ici est que la collection Controls n'est pas tout le contrôle de la page - plutôt, c'est seulement Les contrôles d'enfants immédiats de la commande actuelle (et une page sont un type de contrôle ). ces contrôles peuvent à leur tour avoir leur propre contrôle des enfants. Pour en savoir plus sur cela, lisez sur le ASP.NET STRUCTRY ARBRE ICI et sur NamingContaineres ici . Pour vraiment obtenir chaque zone de texte n'importe où sur la page, vous avez besoin d'une méthode récursive, comme celle-ci: xxx

utilisé comme un méthode d'extension , comme: xxx


5 commentaires

Ok, mais que voulez-vous dire par textbox de haut niveau? Mes boîtes de texte ne sont que des boîtes de texte "normales" dans une forme ..


@Svein Voir ma réponse mise à jour. Votre formulaire Web est un arbre de commandes - commandes contenant des contrôles contenant des contrôles, etc. «Niveau supérieur» signifie des contrôles qui vivent au niveau même, ou le plus à l'extérieur, de la hiérarchie.


Merci beaucoup pour l'explication détaillée et l'exemple de code! J'aime Stackoverflow, tant de gens formidables qui veulent aider les autres :-)


Voici un lien vers une autre méthode d'extension qui constitue une méthode tout appelée à une collection de contrôle qui vous donne une liste énumérable de tous les contrôles contenus dans une collection de contrôle récursivement. extensionMethod.net/details.aspx?id=5 Je trouve parfois pratique parfois.


Désolé je voulais dire "ajoute une méthode" au lieu de "Alls une méthode" :)



2
votes

Vous devez recueillir. Les commandes sont dans une structure d'arborescence - page.Controls n'est pas une liste aplatie de toutes les commandes de la page. Vous auriez besoin de faire quelque chose comme ce qui suit pour obtenir tous les valeurs de textboxes: xxx

... xxx


0 commentaires

0
votes

Vous pouvez essayer cette pièce de code pour obtenir une liste de toutes les textes de texte xxx


1 commentaires

Je vous ai notifié avant de relier à votre propre site Web sans attribution.