0

我有一个通用的 Alert 函数,它在我的 asp.net 应用程序中显示一个消息框:

public void Alert(string sTitle, string sMessage)
{
  StringBuilder sbScript = new StringBuilder();
  sbScript.Append("<script language='Javascript'>");
  sbScript.Append("var varDateNow = new Date();");
  sbScript.Append("var varTimeNow = varDateNow.getTime();");
  //sbScript.Append("var varAlertTime = document.getElementById('Master_cphAlertTime').value;");        
  sbScript.Append("var varAlertTime = document.getElementById('cphAlertTime').value;");
  sbScript.Append("if(varTimeNow - varAlertTime < 1500)");
  sbScript.Append("{alert('");
  sbScript.Append(strMessage);
  sbScript.Append("');}");
  sbScript.Append("</script>");
  ClientScript.RegisterStartupScript(this.GetType(), strTitle, sbScript.ToString());
}   

警告框并非每次都出现。令我困惑的是为什么它有时会出现而在其他时间不出现?它不出现的时间是页面即将被重定向(或 server.transfer)到另一个页面的时候。

任何想法为什么随机功能?

4

1 回答 1

1

你可以在你的应用程序中实现这个静态类

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());
            }
        }

并通过像这样的简单调用调用警报/消息框MessageBox.Show("hello");

于 2012-08-10T17:40:09.027 回答