Historia programando control web para no dormir.

Los hechos ocurrieron una mañana normal y corriente de un invierno normal y corriente en una oficina normal y corriente. Las extensiones Ajax de .NET empezaban a ser instaladas en los equipos de los programadores poco a poco, conforme se iban necesitando. Visual Studio 2008 tambien se iba probrando, poco a poco, aunque eso es otra historia.

 Recien empezada la mañana, un gran terror aparecio por la pantalla de un programador. Un terror, que todavía sigue sin ser aclarado.

 

 

Lás manchas de cafe derramadas por el aterrado empleado todavía no han sido limpiadas al resurgir, de las entrañas del interprete JavaScript, el error, el terror, abominación, el chupacabras que todo programador teme en sus pesadillas más oscuras.

 

Rapidamente, el programador, debidamente adiestrado, puso en marcha el protocolo y activo el boton del panico que, como cuenta la leyenda, todo programador que ha sufrido la programación de nuestros antiguos, el ASMembler, dispone.

 

 

 A los pocos segundos, un equipo de elite de la compañia dotado de los mejores conocimientos que el tiempo, la dedicación y el dinero lo permiten, con un empujón derribarón al empleado y se pusierón a resolver EL MISTERIO.

 

 Diversos documentalistas coinciden más o menos en la versión de los hechos, que a continuación procedemos a relatar:

 

 Todo empezo con un control funcionando a la perfecto, llamado EasyPopUpControl, disponible, libre del mal y  purificado, para descargar en está página. Los posteriores interrogatorios al programador revelarón los sutiles pero relevantes cambios que se hicierón para que apareciese la abominación. Veamos una captura del control en funcionamiento.

 

 

Un funcionamiento, realmente sencillo, cuando pulsamos el boton de arriba, aparece una especie de PopUp que bloque el contenido de la pantalla. Para levantar el PopUp, basta con codificar un MiControl.Visible=true escrito en C# o VB.NET.

 

Despues de un rato, los investigadores descubrieron que la abominación solo se daba cuando nuestro control formaba parte de un UpdatePanel. Solo si estos dos factores se usaban al mismo tiempo, surgia la invocación demoniaca, y a los pocos ticks, el HORROR con mayusculas.

     <asp:UpdatePanel ID=»UpdatePanel1″ runat=»server»>
        <ContentTemplate>
            <asp:Button ID=»Button1″ runat=»server» Text=»Button» OnClick=»Button1_Click» />
            <cc1:EasyPopUp ID=»EasyPopUp1″ runat=»server»>
                <div style=»width: 100; height: 100″>
                    <asp:Button ID=»Button2″ runat=»server» Text=»Button» OnClick=»Button2_Click» /></div>
            </cc1:EasyPopUp>
        </ContentTemplate>
    </asp:UpdatePanel>

 
¿Quizás fuesen las instrucciones que conseguian una visualización correcta en tiempo de diseño las causantes?

[Category(«Appearance»)]

        [DefaultValue(«false»)]

        [Localizable(false)]

        public  bool Visible

        {

            get

            {

                if (DesignMode) return
true
;

                if (ViewState[this.ID
+ «_Visible»] != null)

                   
return (bool)ViewState[this.ID + «_Visible»];

                else

                   
return false;

            }

            set

            {

               
ViewState[this.ID + «_Visible»] = value;

            }

        }

¿O tal vez la invocación de código javascript embebido en la Dll? No parece que ninguna de esas fuesen las causas del daño. Fue algo mucho más ingenio, motivado quizás por la cada vez más cerca fecha de entrega,  seguridad del programador o confianza en las observaciones y sugerencias de Visual Studio. El caso es que al cambiar las caracteristicas de la propiedad del control ‘Visible’ de «public  bool Visible» a «public override bool Visible», tal como sugeria Visual Studio, ocurria la desgracia. Está propiedad overrideada, sobrevivio al paso de los años oculta por el buen funcionamiento del control sin que nadie se percatase de ella. Es solo cuando las extensiones ASP.NET hicieron acto de presencia cuando ocurrio lo ya contado.

 ¿Porquè?, muchas discusiones ha habido en la cafeteria sobre este tema, muchos correos enviados. Incluso se sugirio enviar una misiva a la santa sede en seattle, aunque finalmente no se hizo. La solución, evidentemente fue reemplazar la palabra prohibida override, por una que llenaba de esperanza a todos los programadores, «new».

 

Y ustedes, tengan cuidado en sus casas, nunca se sabe que errores, abominables, se ocultan entre nuestros programas.

 

P.D: En realidad este post era para describir el como se hizo este control, pero bueno. El control está para descargar por si alguien lo quiere.

EasyPopUpControl