2009-06-29 7 views
2

J'ai un projet de taille moyenne avec beaucoup de pages. Une des choses que j'ai remarquées est que nous avons beaucoup d'étiquettes qui ont AssociatedControlID pointant vers des contrôles qui ne sont pas visibles. Les contrôles cibles sont visibles lorsqu'un utilisateur dispose des autorisations d'édition, mais pas normalement.Bonne façon de gérer AssociatedControlID manquant

Cela signifie que le code HTML généré n'est pas valide, ce que nous aimerions obtenir le plus proche possible.

J'ai tenté d'implémenter une nouvelle étiquette, qui remplace le contrôle d'étiquette existant et restitue l'attribut for uniquement lorsque cela est nécessaire. Cela s'est avéré douloureux car une grande partie de la fonctionnalité requise a été définie sur interne dans la classe Label.

Y a-t-il un meilleur moyen?

+0

Si les contrôles ne sont pas rendus, alors pourquoi sont les étiquettes associées rendus à tous? La visibilité/rendu ne doit-il pas s'appliquer à la fois au contrôle d'entrée et à l'étiquette associée? – Cerebrus

+0

+1 juste pour l'utilisation de la propriété "AssociatedControlID" (ou de la syntaxe '

Répondre

2

Subclassing contrôle Label est pas difficile:

namespace MyNamespace 
{ 
    public class BetterLabel : Label 
    { 
     protected override void OnPreRender(EventArgs e) 
     { 
     Control control = FindControl(this.AssociatedControlID); 
     if (control != null && !control.Visible) 
      this.AssociatedControlID = ""; 

     base.OnPreRender(e); 
     } 
    } 
} 

Voici comment utiliser BetterLabel:

<%@ Register TagPrefix="uc1" Namespace="MyNamespace" %> 
... 
<uc1:BetterLabel ID="Label1" runat="server" Text="Label" AssociatedControlID="TextBox1" /> 
<asp:TextBox ID="TextBox1" runat="server" Visible="false"></asp:TextBox> 
Questions connexes