2009-08-20 7 views
5

Lequel est recommandé? Laissez-moi vous expliquer ce que je veux accomplir!
J'ai une pages utilisées par de nombreux utilisateurs, chaque utilisateur a un rôle différent comme administrateur, opérateur, utilisateur normal.
Lorsqu'un client ouvre cette page, je veux afficher un ensemble de contrôles (boutons) qui dépend de leur rôle.
admin est autorisé à faire x et y, mais un utilisateur normal n'est pas autorisé à faire ces actions.
ASP .NET: contrôles de charge dynamique vs Visible = true

Afin de réaliser ce que je veux faire, quelle approche est la meilleure?
Est-ce que je devrais définir tous les contrôles en HTML puis basculer la propriété Visible, ou charger dynamiquement les contrôles nécessaires?


Pour Visible = false Je suis préoccupé par le temps de traitement du serveur. Même si le balisage HTML n'est pas envoyé au client pour un contrôle Visible = false, je sais que le contrôle est toujours chargé par ASP .NET et peut-être même traité, mais son résultat HTML n'est pas écrit dans le flux de sortie.

Pour le contrôle chargé dynamiquement, un inconvénient est qu'ils doivent être réinitialisés sur Postback, il existe également certains problèmes avec les événements et la publication.

Répondre

3

Je ne le ferais pas de façon dynamique car le gain ne vaut pas la complexité ou les économies perçues. Aussi, si vous définissez visible = false, gardez à l'esprit que viewstate est toujours activé pour vos contrôles. Si vous êtes inquiet au sujet des données de va-et-vient et de traiter avec un viewstate plus grand, assurez-vous de désactiver l'affichage de viewstate pour tous les contrôles ou pour un panneau parent qui les contient. Vous aurez le même inconvénient pour maintenir leur état sur la publication que de le faire dynamiquement.

Aussi, le faire de manière non-dynamique est beaucoup plus facile à maintenir pour le type suivant travaillant avec le code. La mise en page est évidente et plus facile à visualiser que d'essayer de comprendre quel code quand mettre quoi.

La création de contrôles de façon dynamique ne vous apporte vraiment pas grand-chose à part l'exclusion de viewstate et peut-être le côté serveur de traitement négligeable. Je pense que vous auriez du mal à mesurer même une grande partie d'une différence notable, même sous charge entre un contrôle non-viewstate et le surcoût d'avoir à les ajouter dynamiquement si nécessaire. Enfin, il est plus facile de ne pas le faire de manière dynamique, alors pourquoi ne pas prendre le chemin le plus facile en premier et voir si c'est un problème. Si cela devient un problème, affinez-le si nécessaire.

1

.Visible = false est une approche assez raisonnable pour cela. Ne vous préoccupez pas de la rapidité de cette méthode tant que vous n'avez pas prouvé, via le profilage, qu'elle est nécessaire.

1

si vous mettez des contrôles de différents rôles dans différents panneau et simplement panneau visible/ensemble invisible

+0

approche intéressante mais ne fonctionne pas dans mon cas. admin peut faire x et y, et un modérateur peut aussi faire x action, mais pas y –

+0

if (admin) { x.visible = vrai y.visible = vrai } –

+0

si (modérateur) { x.visible = true y.visible = false } –

1

Un autre inconvénient avec des commandes dynamiques est la grande quantité de code fragile que vous devez écrire pour les manipuler et les maux de tête avec les déboguer. Sauf si vous avez des contrôles extrêmement complexes qui prennent du temps, ou si vous avez effectivement identifié un problème de performance, je recommande fortement la méthode invisible (et régulièrement). C'est le principe KISS en action (sans parler du principe "ne pas pré-optimiser").

Questions connexes