Domanda

L'installazione: modulo Web con molti controlli TextBox.

Quando imposto una delle proprietà Enabled del controllo TextBox su False, mi piacerebbe " scambiare " che TextBox esce per un'etichetta in fase di esecuzione. L'idea qui è se viene letto solo in ogni caso, non visualizzarlo in un controllo progettato per la modifica.

Sto pensando che dovrebbe essere abbastanza semplice e riutilizzabile, ma qual è il modo migliore per farlo?

È stato utile?

Soluzione

Non sono sicuro che sia il modo migliore, farei un controllo del server personalizzato è una casella di testo,

quindi sovrascrivi il metodo di rendering, controlla se è di sola lettura,

se viene letto solo, visualizza i tag di span come fanno i controlli di un'etichetta.

in caso contrario, lascia che il rendering di base (casella di testo) prenda il sopravvento ...

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

Altri suggerimenti

Una possibile soluzione sarebbe quella di creare un nuovo controllo estendendo TextBox. Il controllo specializzato sovrascriverà quindi (parti di) il codice di rendering, rendendo il controllo simile a un'etichetta quando ReadOnly = true.

Un altro modo sarebbe quello di esaminare usando un adattatore di controllo. In sostanza, si sarebbe in grado di fare esattamente la stessa cosa raccomandata da BigBlondeViking, ma si potrebbe continuare a usare un normale controllo asp: textbox nel proprio codice. Sarà molto più facile per te e altri sviluppatori.

Informazioni sugli adattatori di controllo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top