21/07/2006, 16:13
|
| | Fecha de Ingreso: julio-2006
Mensajes: 4
Antigüedad: 18 años, 6 meses Puntos: 0 | |
el messagebox no funciona en web, yo implemente una clase sencilla que utiliza la funcion alert de javascript.
la primera vez que se invoca el metodo show en una pagina, se crea una cola en la que se guardan los mensajes de una misma pagina, dicha cola es almacenada en una hashtable. Los mensajes son desplegados despues que finaliza el render de la pagina.
El metodo show es estatico, por esta razon se utiliza una hashtable para almacenar las colas de mensajes, porque varias paginas pueden estar utilizando el mismo metodo.
Te paso el codigo de la clase...
public class MessageBox
{
private static Hashtable m_PaginasenEjecucion = new Hashtable();
private MessageBox() { }
public static void Show(string sMensaje)
{
// Si es la primera vez que la pagina ejecuta este metodo
if (!m_PaginasenEjecucion.Contains(HttpContext.Curren t.Handler))
{
// Intenta castear HttpHandlet como una pagina
Page PaginaActual = HttpContext.Current.Handler as Page;
if (PaginaActual != null)
{
// Crea una cola para almacenar los mensajes
Queue ColaMensajes = new Queue();
// Agrega el mensaje a la cola
ColaMensajes.Enqueue(sMensaje);
// Agrega la cola de mensaje al hash table. La referencia a la pagina
// (IHttpHandler) como clave
m_PaginasenEjecucion.Add(HttpContext.Current.Handl er, ColaMensajes);
// Esto se hace para agregar JavaScript para los alerts
PaginaActual.Unload += new EventHandler(ExecutingPage_Unload);
}
}
else
{
// Si el metodo ya fue ejecutado por la pagina en ejecucion
// la cola de mensajes ya fue creada y ya se agrego una referencia al hashtable
Queue cola = (Queue)m_PaginasenEjecucion[HttpContext.Current.Handler];
// Agrega el nuevo mensaje a la cola
cola.Enqueue(sMensaje);
}
}
// Termino de mostrarse la pagina, se ejecuta el JavaScript para producir el alert
private static void ExecutingPage_Unload(object sender, EventArgs e)
{
// Obtener la cola de mensaje del hashtable
Queue cola = (Queue)m_PaginasenEjecucion[HttpContext.Current.Handler];
if (cola != null)
{
StringBuilder sb = new StringBuilder();
// Cantidad de mensajes registrados
int iCantMensajes = cola.Count;
// Se utiliza el StringBuilder para construir el JavaScript del cliente
sb.Append("<script language='javascript'>");
// Recorre los mensajes registrados
string sMsg;
while (iCantMensajes-- > 0)
{
sMsg = (string)cola.Dequeue();
sMsg = sMsg.Replace("\n", "\\n");
sMsg = sMsg.Replace("\"", "'");
sb.Append(@"alert( """ + sMsg + @""" );");
}
// Cierra el JavaScript
sb.Append(@"</script>");
// Elimina la referencia de la hashtable
m_PaginasenEjecucion.Remove(HttpContext.Current.Ha ndler);
// Escribe el JavaScript al final del stream respuesta
HttpContext.Current.Response.Write(sb.ToString());
}
}
}
Espero que te sea util
Saludos
Natalia |