2009-06-25 8 views
1

La configuration: formulaire Web avec beaucoup de contrôles TextBox.ASP.NET - TextBoxes Swap pour les étiquettes = False quand elle est activée

Quand je mets une des propriété Enabled du contrôle TextBox sur False, je voudrais « swap » qui textBox pour une étiquette lors de l'exécution. L'idée ici étant si elle est seulement lue, ne l'affichez pas dans un contrôle conçu pour l'édition.

Je pense cela devrait être assez simple et réutilisable, mais quelle est la meilleure façon de le faire?

Répondre

3

Je ne sais pas c'est la meilleure façon, je fais un contrôle serveur personnalisé est une zone de texte,

puis remplacer la méthode de rendu, vérifier si elle est en lecture seule,

si elle est en lecture seule alors rendre votre span tags comme un contrôle d'étiquette fait.

sinon puis laissez la base (textbox) rendent prendre ...

public class SpecialTextbox : TextBox 
{ 
    public override void RenderControl(HtmlTextWriter writer) 
    { 
     if (!this.ReadOnly) 
     { 
      base.RenderControl(writer); 
     } 
     else 
     { 
      writer.Write(string.Format("<span id=\"{0}\" class=\"{1}\">{2}</span>", 
          this.ClientID, 
          this.CssClass, 
          this.Text)); 
     } 
    } 
} 
+0

vous pouvez échanger « durée » pour de « label » si vous voulez aussi bien – BigBlondeViking

2

Une solution possible serait de créer un nouveau contrôle TextBox extension. Votre contrôle spécialisé écrase alors (certaines parties) le code de rendu, ce qui rend le contrôle rendu similaire à un Label lorsque ReadOnly = true.

+0

i comme ils votre façon de penser ... – BigBlondeViking

2

Une autre façon serait de se pencher sur l'aide d'un adaptateur de contrôle. Vous seriez essentiellement capable de faire exactement la même chose que BigBlondeViking reccomends, mais vous pourriez coninue d'utiliser un contrôle asp: textbox régulier dans votre code. Ce sera beaucoup plus facile pour vous et les autres développeurs.

About control adapters

Questions connexes