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?

¿Fue útil?

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.

Acerca de los adaptadores de control

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top