ASP.NET - Scambia caselle di testo per etichette quando abilitato = Falso
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?
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.