Visualizzare un MessageBox in ASP.NET 2.0

stefano58

Nuovo Utente
27 Ott 2006
3
0
0
Salve,

io vorrei visualizzare un MessageBox tipo quello che si ha con le Windows Form, guardando in rete ho trovato diverse soluzioni tutte facenti uso (naturalmente ...) di Javascript. Il problema è che tutte le soluzioni funzionano bene tranne che nel mio progetto dove faccio uso di Atlas (Ajax 1.0 beta) e del componente Wizard dell'ASP.NET 2.0. La soluzione che mi è piaciuta di più è quella di Lee Gun pubblicata su Developer Fusion e che consiste di una classe MessageBox di cui riporto il codice:

public class MessageBox
{
private static Hashtable m_executingPages = new Hashtable();
private MessageBox() { }
public static void Show(string sMessage)
{
// If this is the first time a page has called this method then
if (!m_executingPages.Contains(HttpContext.Current.Handler))
{
// Attempt to cast HttpHandler as a Page.
Page executingPage = HttpContext.Current.Handler as Page;
if (executingPage != null)
{
// Create a Queue to hold one or more messages.
Queue messageQueue = new Queue();
// Add our message to the Queue
messageQueue.Enqueue(sMessage);
// Add our message queue to the hash table. Use our page reference
// (IHttpHandler) as the key.
m_executingPages.Add(HttpContext.Current.Handler, messageQueue);
// Wire up Unload event so that we can inject
// some JavaScript for the alerts.
executingPage.Unload += new EventHandler(ExecutingPage_Unload);
}
}
else
{
// If were here then the method has allready been
// called from the executing Page.
// We have allready created a message queue and stored a
// reference to it in our hastable.
Queue queue = (Queue)m_executingPages[HttpContext.Current.Handler];
// Add our message to the Queue
queue.Enqueue(sMessage);
}
}

// Our page has finished rendering so lets output the
// JavaScript to produce the alert's
private static void ExecutingPage_Unload(object sender, EventArgs e)
{
// Get our message queue from the hashtable
Queue queue = (Queue)m_executingPages[HttpContext.Current.Handler];
if (queue != null)
{
StringBuilder sb = new StringBuilder();
// How many messages have been registered?
int iMsgCount = queue.Count;
// Use StringBuilder to build up our client slide JavaScript.
sb.Append("<script language='javascript'>");
// Loop round registered messages
string sMsg;
while (iMsgCount-- > 0)
{
sMsg = (string)queue.Dequeue();
sMsg = sMsg.Replace("\n", "\\n");
sMsg = sMsg.Replace("\"", "'");
sb.Append(@"alert( """ + sMsg + @""" );");
}
// Close our JS
sb.Append(@"</script>");
// Were done, so remove our page reference from the hashtable
m_executingPages.Remove(HttpContext.Current.Handler);
// Write the JavaScript to the end of the response stream.
HttpContext.Current.Response.Write(sb.ToString());
}
}
}

Quando richiamo il metodo show(), ad esempio, dal Pag_Load() funziona ma se lo richiamo da qualche bottone (che è situato all'interno del Wizard) ottengo il seguente errore:

Sys.WebForms.PageRequestManagerParserErrorException: The Message received from the server could not be parsed.

Sapete darmi un aiuto?

Grazie
Stefano
 

Discussioni simili