2010-09-20 5 views
1

J'ai environ 20 div dans une page ASPX. À tout moment, un seul d'entre eux sera visible. J'ai besoin de décider quelle div afficher en fonction de la chaîne de requête.Meilleur moyen de basculer la visibilité Div en fonction de la chaîne de requête dans C#?

http://...?mode=<ModeName> 

Le moyen facile serait de commencer par tout div est invisible, alors il suffit de mettre le QueryString dans le commutateur et écrire des cas pour tous les ModeNames possibles (ou l'obtenir dans un grand if-else la structure)

Je n'aime pas vraiment les choses de codage dur parce que si à l'avenir si j'ajoute/enlève n'importe quel div puis j'ai besoin de "se souvenir" de faire les changements nécessaires dans les endroits qui basculent divs. Je pensais créer une énumération avec tous les noms et passer cette énumération à la fonction afin que je puisse parcourir toutes les énumérations et définir la visibilité en conséquence. De cette façon, j'ai seulement besoin d'ajouter le nom div dans la déclaration enum supérieure. Mais cela n'a pas fonctionné comme ça (probablement je suis trop compliqué pour le faire fonctionner)

Est-ce que Switch Block est mon seul moyen de sortir de ça? Quelqu'un at-il une meilleure façon de faire cela? Merci d'avance!

+0

juste une observation - en fonction du problème , il pourrait être logique d'envoyer seulement 1 DIV au lieu de tous les 20: 1) puisque vous savez quel DIV afficher en fonction de QueryString, vous pouvez gérer tout du côté serveur; 2) si vous voulez vraiment prendre une décision du côté client, vous pouvez charger AJAX à la demande. –

+1

dans le bloc de commutation C# (côté serveur) peut être évité si les valeurs d'énumérateur font partie du modèle de nom DIV. check: Enum.GetNames(), Enum.Parse(), Enum.ToString() –

+0

@DK: J'ai essayé votre approche, ça fonctionne comme je le voulais.Pas de switch, non sinon, j'ai maintenant juste un pour chaque itération à travers toutes les énumérations avec System.Enum.GetNames() et accéder au contrôle avec FindControl() et paramétrer la visibilité. Bien sûr, je vérifie les conditions nulles, et quelques autres exceptions qui pourraient se produire aussi bien. Merci beaucoup, pouvez-vous re-soumettre votre commentaire comme une réponse afin que je puisse marquer comme ma réponse voulue? Merci! – iamserious

Répondre

0

je ferais tout ou partie des éléments suivants:

  • Définir les différents modes de votre fenêtre dans une énumération (public enum ModeNames {View, Edit, Create, Summary ...}). Rendez cette énumération générique mais descriptive.
  • Expose une propriété DisplayMode qui analyse QueryString dans la valeur enum. Vous devriez avoir le contrôle des ModeNames ajoutés à QueryString, mais puisque c'est la chaîne de requête et que le client peut taper ce qu'il veut, je mettrais un contrôle d'erreur qui montrera un mode d'affichage "par défaut" si le QueryString n'est pas l'une des valeurs attendues. Donnez à la divs un runat = server et un attribut ID (je suppose que vous l'avez déjà fait depuis C# et non JavaScript), et dans votre gestionnaire Page_PreRender, définissez la propriété Visible de chaque div (référencée par son ID en tant qu'objet) à une expression évaluant si le DisplayMode actuel est l'un des modes dans lequel cette div devrait être visible (par exemple, thisDiv.Visible = new[]{ModeNames.Create, ModeNames.Edit}.Contains(DisplayMode)). Alternativement, au lieu de la deuxième étape, vous pouvez le faire dans le balisage, soit en spécifiant la propriété visible du div (comme un objet côté serveur) en utilisant une expression inline similaire évaluant DisplayMode, ou en incluant un JavaScript OnLoad gestionnaire pour le div (qui ne doit plus être côté serveur) qui définit la visibilité en utilisant le DOM, basé sur la même expression C# en ligne.
+0

Cela ressemble à un bon moyen de le faire, si je n'avais pas ce commentaire de DK sur Enum.Getnames() J'aurais ramassé ça. Merci quand même! – iamserious

+0

J'attendais que M./Mme DK soumette son commentaire comme réponse, mais comme il ne l'a pas fait, et puisque je l'aurais choisi s'il n'avait pas eu ce commentaire, je considère que c'est la bonne réponse. – iamserious

0

Je suggère de définir une relation entre les données transmises à querystring et les noms (et ids) des divs que vous voulez gérer.

Le reste, vous devez savoir, utilisez un ScriptManager pour exécuter du code JavaScript pour afficher/dissimuler divs appropriées en fonction de ce que vous lisez querystring,

Espoir qui aide,

+0

Je veux vraiment le faire du côté serveur car je ne veux pas traiter toutes les informations quand la div ne sera même pas visible! Merci quand même! – iamserious

Questions connexes