Ventana de espera en ASP.NET
Uso de instrucciones HTML y variables de Sesión

Fecha: 04/Ene/2005 (3 de Enero de 2005)
Autor: Luis Ruiz Pavón luis_ruiz_pavon@hotmail.com

 


Bueno pues visto que es una cosa de la cual no he encontrado mucha información cuando me encontré con el problema, he decidido compartir con todos la manera mediante la cual he conseguido mostrar una ventana de espera en ASP.NET para cuando un proceso se alarga durante un tiempo determinado. Puede que para alguno de vosotros no os parezca una manera elegante de mostrar este tipo de ventanas pero es lo que hay :).

Manos a la obra:

Lo primero será diseñar la ventanita de espera (espera.aspx), a continuación os muestro una imagen de la mía:

Para saber si el proceso ha finalizado utilizaremos una variable de sesión llamada Session["endWait"], que deberá inicializarse con el valor "NO" en la página donde se llame a la ventana.

El código de la página de espera es el siguiente:

public class espera : System.Web.UI.Page
{
     private void Page_Load(object sender, System.EventArgs e)
     {
        if (Session["endWait"].ToString().Equals("SI"))
        {
           Response.Write("<script>window.close();</script>");
           Session["endWait"] = "NO";
        }
     }
}

Y ahora os estareis preguntando y como vuelve a consultar la página de espera el valor de la variable de sesión endWait si el evento Load se ejecuta una sola vez??? Eh aquí la respuesta: añadimos la siguiente instrucción html entre las etiquetas <head></head> a la página de espera:

<meta http-equiv="refresh" content="3">

Con eso conseguimos que la página se refresque cada 3 segundos. El tiempo lo puedes poner tu en función de tus necesidades.

Ahora creamos la llamada a la página de espera desde otra página (por ejemplo desde la default.aspx):

para ello yo he utilizado esta función JavaScript que la llamo en el evento onClick de la imagen del botón:

function openWindowWait()
{
window.open('espera.aspx','', 'toolbar=no,location=no,directories=no,status=no,menubar=no, scrollbars=no,resizable=no,copyhistory=no,width=420,height=80,top=300,left=300');
}

el código HTML de la imagen sería el sigueinte:

<A href="proceso.aspx"><IMG src="Imagenes/cargar.jpg" alt="Cargar Fichero" border="0" onclick="openWindowWait()"></A>

y el código de la página default.aspx sería el siguiente:

public class _default : System.Web.UI.Page
{
    
    
    
     private void Page_Load(object sender, System.EventArgs e)
     {
         
         
         
          // Ponemos la variable de sessión a NO para que la
          // ventana de espera no se cierre hasta que la
          // página proceso.aspx no lo mande
         
          Session["endWait"] = "NO";
     }
}

Solo nos falta crear la página proceso.aspx e introducir su código:

public class proceso: System.Web.UI.Page
{
    
    
    
     private void Page_Load(object sender, System.EventArgs e)
     {
         
         
         
          // Ponemos la variable de sessión a NO para que la
          // ventana de espera no se cierre hasta que la
          // página proceso.aspx no lo mande
         
          Session["endWait"] = "SI";
     }
}

Y con esto nuestro sistema de ventana de espera está listo para usarse!!! Si encontrais una manera mas efectiva de hacer esto o alguna correción de este código, por favor notificarmelo por mail ;)

Salu2 y hasta pronto...


Espacios de nombres usados en el código de este artículo:


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

ir al índice

Fichero con el código de ejemplo: luis_VentanaEspera.zip - 34.6 KB