Comment sélectionner un élément par Classe au lieu de l'ID dans l'ASP.NET?
J'ai un peu dispersés <p>
éléments sur la page aspx qui, j'en suis à un regroupement d'utiliser une classe comme le <p class="instructions" runat="server">
Dans mon code derrière, à l'aide de C# je veux masquer ces éléments, en utilisant quelque chose comme
instructions.Visible = false;
Cependant je me rends compte que je ne peut le faire que dans le code-behind si j'utilise l'ID, mais le résultat sera non valide HTML/CSS Sélecteur puisque vous ne pouvez pas avoir plusieurs ID avec le même nom de l'ID...
Sinon est-il une autre façon de regrouper les contrôles si ce n'est pas la classe?
EDIT: je ne peux pas l'utilisation de JavaScript, de sorte que la sélection doit être faite en C# code-behind/ASP.NET
OriginalL'auteur firedrawndagger | 2010-05-04
Vous devez vous connecter pour publier un commentaire.
Côté de regroupement de toutes les commandes dans un seul conteneur de contrôle, il n'est pas facile de trouver un groupe de contrôle compte tenu de certains biens dans ASP.NET le code côté serveur.
Sur le côté client, vous pouvez utiliser quelque chose comme jQuery pour trouver ces éléments et de les cacher:
Je serais probablement le faire en réponse lorsque la page est complètement chargée:
Un inconvénient de cacher des éléments en Javascript, c'est que si il y a assez de données, il peut prendre une seconde pour cause de contenu à clignoter. Une autre différence est que le contenu caché côté client ne pas supprimer de DOM - le contenu est-il juste caché. Masquage des contrôles côté serveur empêche de leur contenu, de même émis dans le code HTML.
Faire la même chose en C# est un peu plus difficile - il faut parcourant récursivement le contrôle de l'arbre et à la recherche d'éléments dans la
Control
collection qui correspondent. C'est une commune assez de fonctionnement que la fonction d'utilité est utile. C# itérateur syntaxe (taux de retour) est utile dans la prise de cette propre:Cacher les commandes est relativement facile:
Cela ressemble beaucoup et C# solution est exactement ce que je cherche.
Peut-être avoir un autre regard sur ma réponse. C'est moins de code et à mon avis pas si cher, en n'ayant pas besoin de traverser le contrôle des collections. Bien sûr, vous devez régler le <p> éléments dans votre aspx comme un inconvénient.
Ce code va provoquer un débordement d'exception et ne doit pas être utilisé. En outre, il est défectueuse en ce qu'elle ne passe pas au contrôle des enfants (dans chacune des boucles foreach enfant est inutilisée). (voir Blackcats réponse ci-dessous)
Étant donné que c'est la réponse et il est presque correct, peut-être @LBushkin pouvez le corriger, de sorte qu'il n'est pas nécessaire de lire à peu près la même chose. (c'est à dire Ne pas seulement besoin de passer
child
dans le imbriquéeforeach
au lieu de passerc
?)OriginalL'auteur LBushkin
La chose est assez facile. Dans votre ASPX:
Dans votre code:
Le codebehind sera relié automatiquement à la pré-rendu gestionnaire d'événement dans votre classe. Ce qui jette de l'expéditeur pour le contrôle et définit sa Visibilité dépend de la classe css.
Vous avez juste à régler les balises et vous n'avez pas besoin d'un code de lot, traversant votre collection.
Cela a résolu mon problème. Depuis que je suis de créer les objets de façon dynamique, je lui attribue la fonction de cette manière= vignette.Pré-rendu += funcThumbnail_PreRender; tout a fonctionné parfaitement!
OriginalL'auteur Sebastian P.R. Gingter
Je tiens à répondre à l'une des premières réponses à ces questions - où sommes-nous en utilisant la récursivité passer en revue tous les contrôles. Tout d'abord, ne devrions-nous pas être recursing sur les éléments enfants? Je n'ai pas regarder de plus près le code et vu que nous n'arrêtait pas d'appeler la méthode récursive sur "c", pas "enfant". Deuxièmement, j'ai trouvé qu'aucun des articles sur ma page web pouvant être exprimées à WebControl - seulement pour le contrôle htmlgenericcontrol.
Après l'édition, j'ai eu ceci:
Noter que je ne pouvais pas utiliser "CssClass" - j'ai dû mettre mon propre attribut ('ishidden') pour arriver à faire ce travail.
Je suis en utilisant ASP.NET cadre 2.0/3.0/3.5.
OriginalL'auteur blackcatweb
Si vous incluez le JQuery de base, tout ce que vous avez à faire est d'enregistrer ce script sur votre page :
Il utilise le JQuery sélecteur de classe http://api.jquery.com/class-selector/
OriginalL'auteur Daniel Dyson
Vous pouvez créer une fonction récursive à marcher dans les pages de tableau de contrôle, de la vérification de la CssClass attribut pour chaque contrôle et de définir comme requis.
J'allais taper un rude exemple de code - mais LBushkin publié un moyen de mieux que la mienne aurait été!
OriginalL'auteur Mesh
<asp:Panel>
approcheVous pouvez les mettre tous à l'intérieur d'un si ils sont successivement placés dans votre formulaire. De cette façon, vous pouvez facilement basculer le .Propriété Visible du panneau pour cacher des morceaux de la forme.
JavaScript approche
Vous pouvez utiliser le
ClientScriptManager.RegisterStartupScript()
à émettre de JavaScript et ensuite utiliser jQuery pour se cacher en classe.OriginalL'auteur rtpHarry
Bâtiment sur le Sebastian P. R. Gingter solution, Voici ce que j'ai fait, bien qu'il se sent toujours un peu un hack compte tenu que je dois utiliser un MS en fonction WebControl au lieu d'opter pour un système plus simple, HTML contrôle.
En C#:
En aspx:
OriginalL'auteur firedrawndagger
J'ai testé blackcatweb de la solution. Il retourne dublicates, donc je l'ai corrigé et ajouté de la méthode pour les contrôles webcontrols. Mon code est ci-dessous. Pour une recherche par classe attrName="classe":
OriginalL'auteur Stas V
Vous pouvez utiliser JQuery Nom De La Classe Sélecteur à cette fin.
Une autre solution est de garder le même id et ne pas faire les contrôles côté serveur. en JavaScript document.getElementById à obtenir le contrôle, dans votre cas, vous obtiendrez un tableau qui va contenir tous les contrôles ayant le même id. Parcourir ces commandes et de définir leurs attributs d'affichage en conséquence.
OriginalL'auteur MUS