2012-08-10 60 views
0

我在我的asp.net应用程序显示一个消息框,一个通用的报警功能:显示警报框在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)到另一个页面。

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

+0

只是一个简单的通话阿勒特/消息框,你说的“页面即将获得的意思实现这个静态类重定向“?如果您正在将用户发送到另一个页面,如果此警报提示也在目标页面上? – 2012-08-10 17:23:10

+0

不,警报只会说“您必须登录才能访问该信息”。我希望此警报在他们即将重定向之前弹出。 – DotNetRookie 2012-08-10 17:26:37

+0

我怀疑功能是随机的。如果你正在做任何形式的PostBack,那么脚本将不会被执行。它被设置为只在您第一次访问该页面时执行脚本。也许你应该在实际调用Alert()方法的地方包含一些代码。 – mclark1129 2012-08-10 17:27:43

回答

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");