ASP.NET - Intercambiar cuadros de texto por etiquetas cuando está habilitado = Falso
Pregunta
La configuración: formulario web con muchos controles TextBox.
Cuando configuro cualquiera de las propiedades Enabled del control TextBox en False, me gustaría " intercambiar " ese cuadro de texto para una etiqueta en tiempo de ejecución. La idea aquí es que si se lee solo de todos modos, no lo muestre en un control diseñado para editar.
Estoy pensando que esto debería ser bastante simple y reutilizable, pero ¿cuál es la mejor manera de hacer esto?
Solución
No estoy seguro de que sea la mejor manera, yo haría un control de servidor personalizado es un cuadro de texto,
luego anule el método de renderizado, verifique si es de solo lectura,
si es de solo lectura, renderice sus etiquetas span como lo hace un control de etiqueta.
si no es así, deje que el renderizado de la base (cuadro de texto) se haga cargo ...
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));
}
}
}
Otros consejos
Una posible solución sería crear un nuevo control que extienda TextBox. Su control especializado anularía (partes de) el código de representación, haciendo que el control se renderice de manera similar a una etiqueta cuando ReadOnly = true.
Otra forma sería considerar el uso de un adaptador de control. Básicamente, podría hacer exactamente lo mismo que recomienda BigBlondeViking, pero podría seguir utilizando un control asp: textbox regular en su código. Eso será mucho más fácil para usted y otros desarrolladores.