Hola, Henry:
El mensaje que te muestra el motor de ASP .NET es muy simple: el modo en el cual estás accesando al servidor no es UserInteractive, esto es, no tienes interacción directa con el servidor, sino más bien con sus servicios (ASP .NET e IIS). Tal como dice el mensaje que te da la aplicación, podrías optar por asignarle al mensaje la opción ServiceNotification, como se muestra a continuación:
MessageBox.Show("pag invalida", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
Sin embargo, eso no haría más que mostrar el mensaje en la máquina servidor de tu aplicación, pero como ya dije, los usuarios de una aplicación Web no interactúan directamente con el servidor web.
La solución a tu problemita está en esta clase que te presento a continuación
using System;
using System.Web.UI;
using System.Web;
using System.Text;
using System.Collections;
&t;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US">
namespace LeeGunn.Web.UI.MessageBox
{
/// <summary>
/// Descripción de resumen para la clase MessageBox.
/// </summary>
public class MessageBox
{
private static Hashtable mpaginasEnEjecucion = new Hashtable();
/// <summary>
/// Constructor vacío.
/// </summary>
private MessageBox(){}
public static void Show( string Mensaje )
{
// Si es la primera vez que una página llama a este método.
if( !m_paginasEnEjecucion.Contains( HttpContext.Current.Handler ) )
{
// Trata de castear el HttpHandler como Page.
Page executingPage = HttpContext.Current.Handler aslt;/SPAN> Page;
if( executingPage != null )
{
// Se crea una cola para almacenar uno o más mensajes.
Queue colaMensajes = new Queue();
&bsp; // Se agrega nuestro mensaje a la cola.
colaMensajes.Enqueue( Mensaje );
// Se agrega nuestra cola de mensajes a la tabla hash. Se utiliza nuestra referencia page
// (IHttpHandler) como llave para la tabla hash.
m_paginasEnEjecucion.Add( HttpContext.Current.Handler, colaMensajes );
// Se asocia el evento Unload para poder inyectar el código JavaScript para las alertas.
executingPage.Unload += new EventHandler( PaginaEnEjecucion_Unload );
}
}
else
{<:p>
// Si el método ha sido llamado antes por la página.
// ya tenemos nuestra cola de mensajes y su referencia en nuestra tabla hash.
Queue cola = (Queue) m_paginasEnEjecucion[ HttpContext.Current.Handler ]
// Se agrega nuestro mensaje a la cola.
cola.Enqueue( Mensaje );
}
}
// Cuando nuestra página ha terminado de renderizar el código se agrega el código JavaScript para producir las alertas.
private static void PaginaEnEjecucion_Unload(object sender, EventArgs e)
{
// Se obtiene nuestra cola de mensajes desde la tabla hash.
Queue cola = (Queue) m_paginasEnEjecucion[ HttpContext.Current.Handler ]
if( cola != null )
{
StringBuilder sb = new StringBuilder();
// Cantidad de mensajes registrados en la col.
int iMsgCount = cola.Count;
// Se utiliza al StringBuilder para crear el código JavaScript del cliente..
sb.Append( "<script language='javascript'>" );
// Se itera en los mensajes de la cola.
string sMsg;
while( iMsgCount-- > 0 )
{
sMsg = (string) cola.Dequeue();
sMsg = sMsg.Replace( "\n", "\\n" );
amp;nbsp; sMsg = sMsg.Replace( "\"", "'" );
sb.Append( @"alert( """ + sMsg + @""" );" );
}
// Se cierra la sección de código JavaScript.
sb.Append( @"</script>" );
// Una vez agregado el código JS se quita la asociación del evento Unload a este método
m_paginasEnEjecucion.Remove( HttpContext.Current.Handler );
// Se escribe el código JavaScript al final del stream de respuesta.
HttpContext.Current.Response.Write( sb.ToString() );
}
}&l;/P>
}
}
Como puedes ver, la solución es simple (y a veces, tan obvia que no la podemos ver): JavaScript. La función alert() de JS nos permite mostrar mensajes. Esta clase simplemente enmascara el proceso de generación del código JS necesario para mostrar tus mensajes.
Además, la implementación de las colas, te permite mostrar más de un mensaje (uno después de otro, obviamente).
Espero que te sirva de ayuda. Por lo pronto no me lo agradezcas a mí. Esta es simplemente mi traducción de la clase implementada por Lee Gunn (como puedes apreciar por el nombre del Namespace de la clase) en su artículo Simple MessageBox functionality in ASP .NET en CodeProject. Realmente les recomiendo esta comunidad que día a día expone gran cantidad de código muy útil para diversos propósitos.
Hasta la próxima. Bye.
Я!©ђ!Є ©Я∆ZΨ
|