2009-07-29 6 views
0

J'ai une certaine page et, en fonction d'un rôle d'administrateur, beaucoup de contrôles de validation supplémentaires doivent être insérés. Cependant, je ne veux pas prendre le risque qu'un validateur soit activé pour d'autres utilisateurs. Ce que je pensais, c'est utiliser une forme de "héritage visuel" mais je ne sais pas quel chemin choisir. Peut-être avoir des pages séparées .aspx qui héritent de la même classe (qui hérite de la page)? Note latérale: ceci doit être fait dans webforms, pas mvc.Héritage visuel dans ASP.NET sans pages maîtres

Informations supplémentaires: Le problème que j'essaie de résoudre est la séparation des rôles et l'impact sur la page sans avoir à dupliquer la page et avoir à maintenir les changements dans les deux. Il y a des clients qui voient la page vanilla et les administrateurs peuvent voir les mêmes informations mais avec des contrôles de validation supplémentaires. Cependant, ces contrôles de validation ne doivent pas être vus par les clients. De plus, on peut voir plus d'informations mais cela pourrait être traité en utilisant la visualisation basée sur le rôle de certains contrôles utilisateur.

Quelqu'un a une idée à ce sujet? Pourquoi ne voulez-vous pas utiliser les pages maîtres?

+1

Les pages maîtres sont le seul héritage visuel qui fonctionne correctement dans ASP.NET. –

Répondre

2

Les pages maîtres font exactement ce que vous voulez faire - elles peuvent même "hériter" les unes des autres (d'une certaine manière).

Je suggère que vous utilisez master pages pour faire ce que vous voulez.

pages maître ASP.NET vous permettent de créer une mise en page cohérente pour les pages dans votre application. Un seul gabarit définit l'aspect et la convivialité et le comportement standard que vous souhaitez pour toutes les pages (ou un groupe de pages ) dans votre application. Vous pouvez puis créer des pages de contenu individuelles qui contiennent le contenu que vous souhaitez afficher . Lorsque les utilisateurs demandent les pages de contenu , ils fusionnent avec le gabarit pour produire une sortie qui combine la disposition de la page maître avec le contenu de la page de contenu .

+0

Nous y pensions aussi mais dans ce cas le problème passe à l'emplacement des pages de contenu. Ou voulez-vous dire que la zone de texte serait sur la page maître et le validateur, si nécessaire, est placé sur la page de contenu? Nous avons plus de 100 contrôles sur notre page et aussi sur les grilles/listviews? Je pense que c'est une solution Nogo. –

+0

Je ne comprends pas - quel problème essayez-vous de résoudre? Comment feriez-vous mieux de le résoudre? –

+0

J'ai ajouté quelques informations supplémentaires dans ma question pour, je l'espère, clarifier un peu plus. –

0

Souvent, de tels problèmes peuvent être résolus en divisant la page en commandes utilisateur (.ascx). Cela peut devenir un peu brouillon, mais fait le travail.

L'héritage des pages est difficile, bien que possible. Ce que vous devez réaliser, c'est qu'une page .aspx ne peut pas hériter d'une autre page .aspx. Cela est dû au fonctionnement du compilateur ASP.NET: votre balise XML .aspx est compilée dans une classe dérivée de votre classe code-behind. Comme cela ne se produit qu'à l'exécution, vous ne pouvez pas en hériter d'une autre page .aspx, car la classe n'est tout simplement pas là quand le code-behind est compilé.

Ce que vous pouvez faire est de créer une autre classe qui hérite de la page et en faire hériter vos classes de code .aspx. C'est possible, mais notez que cette classe n'aura pas de partie XML .aspx - vous devrez instancier tous les contrôles vous-même, ainsi qu'assigner leurs propriétés. Dans la plupart des cas, ce sera assez compliqué.

2

Si le problème que vous tentez de résoudre est celui de l'affichage basé sur le rôle des contrôles et que vous utilisez l'ASP intégré.Vous pouvez utiliser le contrôle LoginView pour gérer la visibilité de l'administration:

<asp:LoginView runat="server" ID="LoginView"> 
    <RoleGroups> 
     <asp:RoleGroup Roles="Admin"> 
      <ContentTemplate> 
       Special Admin content 
       <asp:RequiredFieldValidator></asp:RequiredFieldValidator> 

      </ContentTemplate> 
     </asp:RoleGroup> 
    </RoleGroups> 
</asp:LoginView> 
+0

Cela ne réduira-t-il pas les performances et la lisibilité lors de 100 contrôles de ce type? –

+0

La performance est-elle actuellement un problème? Si oui, le goulot de la bouteille est-il lié à la création de contrôles? Le contrôle LoginView est assez léger. La logique pour cacher/montrer le contenu d'administration doit vivre quelque part. Le contrôle déclaratif vous permet de vous exprimer visuellement plutôt que dans le code-behind. C'est certainement un peu verbeux lorsqu'il est exprimé 100 fois. Vous pouvez ignorer le contrôle loginview en créant des enveloppes de contrôle de serveur/utilisateur personnalisées qui exposent une propriété de rôle en plus des propriétés sous-jacentes des contrôles de validateur que vous essayez d'afficher/afficher. – HectorMac

+0

J'aime cette approche de contrôle personnalisé. Je vais creuser un peu plus profond dans ceci pour voir si cela correspond au besoin. –

Questions connexes