Question

La configuration: formulaire Web avec de nombreux contrôles TextBox.

Lorsque je définis sur False l'une des propriétés du contrôle TextBox, je souhaite & "permuter &"; cette TextBox pour une étiquette au moment de l'exécution. L’idée ici étant que si elle est en lecture seule de toute façon, ne l’affichez pas dans un contrôle conçu pour l’édition.

Je pense que cela devrait être assez simple et réutilisable, mais quel est le meilleur moyen de le faire?

Était-ce utile?

La solution

Je ne suis pas sûr que ce soit le meilleur moyen. Je ferais d'un contrôle serveur personnalisé un champ de texte,

puis remplacez la méthode de rendu, vérifiez si elle est en lecture seule,

s'il est en lecture seule, alors rendez vos balises span comme le ferait un contrôle d'étiquette.

sinon, laissez le rendu de la base (zone de texte) ...

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));
        }
    }
}

Autres conseils

Une solution possible serait de créer un nouveau contrôle étendant TextBox. Votre contrôle spécialisé remplacerait alors (une partie de) le code de rendu, ce qui rendrait le contrôle similaire à une étiquette lorsque ReadOnly = true.

Une autre solution consisterait à utiliser un adaptateur de contrôle. Vous seriez essentiellement capable de faire exactement la même chose que BigBlondeViking le recommande, mais vous pouvez continuer à utiliser un contrôle asp: textbox standard dans votre code. Ce sera beaucoup plus facile pour vous et les autres développeurs.

À propos des adaptateurs de contrôle

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top