2013-04-29 72 views
3

好的。我已經閱讀了許多關於您無法從服務器端ASP頁面使用MessageBox.Show的文章。說得通。那些文章主張使用「警報」彈出消息(如確認消息,用戶必須點擊「確定」來確認消息)。有些帖子談到了註冊代碼,但其他的則沒有。我嘗試了所有可以找到的組合,但是仍然無法讓我的服務器端ASP頁面在客戶端瀏覽器中彈出消息!如何讓服務器端的ASP頁面在客戶端的瀏覽器中顯示彈出消息?

下面的代碼在我的代碼隱藏頁中的代碼段:

private void MessageBoxShow(Page page, string message) 
{ 
    Literal ltr = new Literal(); 
    ltr.Text = @"<script type='text/javascript'> alert('" + message + "') </script>"; 
    page.Controls.Add(ltr); 
} 

我也試過這種變化:

protected void MyTrace(string msg) 
{ 
    Response.Write("<script>alert('" + msg + "')</script>"); 
} 

這兩項工作的預期,如果我要去localhost,但是當我將代碼放在服務器上(IIS 7.5下)時,消息從不出現。

有人能給我一個簡單的(但完整的)答案有效嗎?謝謝。

+0

當從服務器運行代碼時,您是否在JavaScript控制檯中看到錯誤? – gilly3 2013-04-29 20:25:19

+0

對不起,但我不知道如何在JavaScript控制檯中查找錯誤。我如何開啓它? – 2013-04-30 12:18:40

+1

在瀏覽器中點擊F12以訪問JavaScript控制檯。在FireFox中,F12快捷鍵只有在安裝了FireBug的情況下才有效。否則,Ctrl + Shift + K將在FireFox中調出本地JavaScript控制檯。 – gilly3 2013-04-30 15:49:23

回答

3

感謝大家對他們的意見。原來,大部分想法都是可行的。我的問題是沒有意識到警告框在方法結束之後纔會彈出(在事後纔有意義)。我結束了使用最簡單的想法,即

Response.Write("<script>alert('" + msg + "')</script>"); 
+0

只是要清楚......你有你的調試器在服務器上運行? – NotMe 2013-05-06 20:35:55

+0

不,但現在你提到它,我希望我知道如何在服務器上運行調試器! – 2013-05-07 01:26:26

0

如果它在本地工作,但不在服務器上,則需要檢查幾件事情。如:

  1. 您的瀏覽器是否緩存頁面?在頁面上進行硬刷新(ctrl + F5),然後重試。
  2. 您確定代碼已部署?看起來像一個愚蠢的事情,但我們必須問。隨着這是一個後續行動:你確定代碼部署到正確的位置?
  3. 你在javascript錯誤?
+0

我已經完成了ctrl + F5,但這並沒有幫助。是的,我確定代碼已正確部署。 (該應用程序使用表單驗證,並且登錄表單即將出現,在我過去之後,我試圖顯示一個「消息框」。) – 2013-04-30 12:20:55

0

使用ClientScriptManager.RegisterStartupScript註冊啓動腳本。看到這個MSDN文檔http://msdn.microsoft.com/en-us/library/asz8zsxy.aspx

+0

這有可能會有所幫助。但是,Page_Load腳本顯然取代了我的代碼隱藏頁面中的Page_Load C#方法。這是不好的,因爲我在Page_Load方法中執行一些重要的東西。你能否推動這個概念發揮作用? – 2013-04-30 12:38:48

+0

從MSDN:「由RegisterStartupScript方法添加的腳本塊在頁面完成加載時但在頁面的OnLoad事件引發之前執行」。我不希望它立即執行。當我告訴它時,我只想執行我的腳本。我該如何解決這個問題? – 2013-04-30 12:49:44

+0

需要查看更多的代碼才能提供任何真正的幫助。 – Chuck 2013-04-30 12:51:38

6

我發現警告框令人討厭。只要創建自己的HTML:

<div runat="server" id="AlertBox" class="alertBox" Visible="false"> 
    <div runat="server" id="AlertBoxMessage"></div> 
    <button onclick="closeAlert.call(this, event)">Ok</button> 
</div> 

顯示它的代碼:

private void MessageBoxShow(string message) 
{ 
    this.AlertBoxMessage.InnerText = message; 
    this.AlertBox.Visible = true; 
} 

添加一些CSS樣式它作爲一個彈出和一些JavaScript來關閉它,當「確定」點擊是。這是一個完整的演示:

<%@ Page Language="C#" CodeFile="Demo.aspx.cs" Inherits="Demo" %> 
<!doctype html> 
<html> 
    <head runat="server"> 
     <meta charset="UTF-8" /> 
     <title>Message Box Demo</title> 
     <style type="text/css"> 
      .alertBox 
      { 
       position: absolute; 
       top: 100px; 
       left: 50%; 
       width: 500px; 
       margin-left: -250px; 
       background-color: #fff; 
       border: 1px solid #ccc; 
       border-radius: 4px; 
       box-sizing: border-box; 
       padding: 4px 8px; 
      } 
     </style> 
     <script type="text/javascript"> 
      function closeAlert(e) 
      { 
       e.preventDefault(); 
       this.parentNode.style.display = "none"; 
      } 
     </script> 
    </head> 
    <body> 
     <form runat="server"> 
      <div> 
       [Regular page content here] 
      </div> 
      <div runat="server" id="AlertBox" class="alertBox" Visible="false"> 
       <div runat="server" id="AlertBoxMessage"></div> 
       <button onclick="closeAlert.call(this, event)">Ok</button> 
      </div> 
     </form> 
    </body> 
</html> 
using System; 
using System.Web.UI; 

public partial class MessageBoxDemo : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     MessageBoxShow("Welcome to my website!"); 
    } 

    private void MessageBoxShow(string message) 
    { 
     this.AlertBoxMessage.InnerText = message; 
     this.AlertBox.Visible = true; 
    } 
} 
+0

這並不完全正常工作。例如,我在closeAlert函數上得到了一個編譯錯誤(關於父節點不合法)。 (我不是一個JavaScript人。) – 2013-04-30 12:22:54

+0

@BarryDysert - 你不應該編譯JavaScript。我已經通過一個完整的測試頁面更新了我的答案。 – gilly3 2013-04-30 16:08:51

+0

謝謝,gilly3,這使得世界的不同:-) – 2013-04-30 17:29:25

相關問題