2013-04-29 51 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

相关问题