Introduction: In this
article I will explain how to create a class to show the message box in asp.net
website as we use in window applications. In window application it is
MessageBox is there to show messages. In webapplication we can also create same
type of messagebox.
While
developing web application in ASP.NET we need to show message box frequently.
For example to show the Message like "Record saved ", "Record
could not be saved" or “Record deleted” or other Validations Messages etc.
But in web forms there is no inbuilt feature to show message box. So we need to
create our own custom class for message box.
Let's create a demo website to demonstrate the concept of messagebox
:
1.
Create a
website “MessageBoxDemo”.
2.
Now add
a class, name it "MessageBox" as shown in image below:
3. A window will pop up as
shown in image below.
4. Click yes. It will create
App_Code folder in the root of the project and also add the new class
"MessageBox" in the App_Code folder automatically.
5.
Open MessageBox.cs
class and write the below code in it.
The complete code in MessageBox.cs file is:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;
using System.Web.UI;
using System.Text;
/// <summary>
/// Summary description for
MessageBox
/// </summary>
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 += 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 = null;
while (System.Math.Max(System.Threading.Interlocked.Decrement(ref iMsgCount), iMsgCount + 1) > 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());
}
}
}
Message Box is ready. To
show the message box you need to call the show()
method of the MessageBox class and pass string message as explained in the example below. You can call it as many
times as required in your application.
Design Section: Add a new page and place a
button on this page.
<asp:Button ID="btnMsgBox" runat="server" Text="Show MessageBox" onclick="btnMsgBox_Click" />
ASP.NET Code
In the code behind write the code as:
protected void btnMsgBox_Click(object sender, EventArgs e)
{
MessageBox.Show("This
is Message Box demo.");
}
Same
concept will work in case of VB.NET.
0 comments:
Post a Comment