Obtenez Tous les Contrôles Web d'un Type Spécifique sur une Page
J'ai été à réfléchir à comment je peux obtenir tous les contrôles sur une page, puis effectuer une tâche dans cette question connexe:
Comment Rechercher dans un C# DropDownList par programmation
J'ai besoin d'un code qui peut scanner la page, obtenir tous les Contrôles DropDownList et de les renvoyer dans une liste.
Je suis actuellement avoir à modifier chaque contrôle, je préfère être en mesure de manière dynamique en boucle sur chaque commande à exécuter ma tâche.
Vous devez vous connecter pour publier un commentaire.
Vérifier mon précédent AFIN de répondre à.
Fondamentalement, l'idée est d'envelopper la récursivité d'une itération à travers la collection de contrôles à l'aide de :
et de l'utiliser :
[Édité 11/26/2013]: ici est une façon plus élégante pour atteindre cet objectif. J'ai écrit deux extensions de méthodes qui peuvent marcher sur le contrôle de l'arbre dans les deux directions. Les méthodes sont écrites dans un plus Linq comme elle produit une énumération:
Grâce à la
this
mot-clé, ces méthodes sont des extensions des méthodes et de simplifier le code.Par exemple, pour trouver tous les
DropDownList
dans la page, vous pouvez simplement appeler:En raison de l'utilisation de la
yield
mot-clé, et parce que Linq est assez intelligent pour reporter l'exécution de l'énumération, vous pouvez appeler (par exemple):L'énumération s'arrêtera dès que le prédicat de la
First
méthode est satisfait. Le contrôle de l'ensemble de l'arbre ne sera pas marché.foreach (var tbox in Page.GetAllControls<TextBox>()) { tbox.Text = box.Text.Trim(); }
dans une réponse directe à la question d'origine.Ici est une version récursive qui retourne une collection du type demandé au lieu d'utiliser un autre argument:
Insérer dans votre classe (statique facultatif).
A cette question et bien que j'ai trouvé Steve B réponse utile, je voulais une méthode d'extension, donc re-compte c':
En boucle par le biais de contrôles sur une page n'est pas difficile - vous avez juste à regarder à l'intérieur de chaque contrôle pour plus de contrôles.
Vous pourriez faire quelque chose comme
Vous pouvez utiliser récursive logique pour obtenir tous les contrôles, comme ceci:
Cela fonctionne si vous utilisez le formulaire composants du système.web.l'interface utilisateur
toutefois, cela ne fonctionne pas lorsque vous les utilisez à partir du système.web.mvc apparemment, alors je suis venu avec le contourner.
Cela fonctionne pour moi, cependant j'ai trouvé que le bouton radio si non sélectionnée est nul donc ne pas retourner tout ce qui est ok je n'ai pas à écrire quoi que ce soit à la base de données si elle est nulle