【问题标题】:How to get a server-side ASP page to display a pop-up message in the client's browser?如何让服务器端 ASP 页面在客户端浏览器中显示弹出消息?
【发布时间】:2013-04-29 20:21:37
【问题描述】:

好的。我已经阅读了几十篇关于不能从服务器端 ASP 页面使用 MessageBox.Show 的文章。说得通。那些文章提倡使用“警报”来弹出消息(如确认消息,用户必须单击“确定”以确认消息)。一些帖子谈到了注册代码,但其他帖子没有。我已经尝试了所有我能找到的组合,但我仍然无法让我的服务器端 ASP 页面在我的客户端浏览器中弹出一条消息!

这是我的代码隐藏页面中代码的 sn-p:

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

如果我要访问本地主机,这两项工作都按预期工作,但是当我将代码放在服务器上(在 IIS 7.5 下)时,消息永远不会出现。

有人可以给我一个简单(但完整)的答案吗?谢谢。

【问题讨论】:

  • 从服务器运行代码时,您是否在 JavaScript 控制台中看到错误?
  • 抱歉,我不知道如何在 JavaScript 控制台中查找错误。如何开启?
  • 在浏览器中按 F12 以访问 JavaScript 控制台。在 FireFox 中,F12 快捷方式仅在安装了 FireBug 时才有效。否则,Ctrl+Shift+K 将在 FireFox 中调出原生 JavaScript 控制台。
  • MessageBoxShowMyTrace 方法在哪里调用?
  • 它们在后面的代码中被调用。但是问题已经解决了。 (请参阅下面的答案。)

标签: asp.net


【解决方案1】:

我发现警报框很烦人。只需使用 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;
    }
}

【讨论】:

  • 这并不完全按原样工作。例如,我在 closeAlert 函数上得到一个编译错误(关于 parentNode 不合法的事情)。 (我不太喜欢 JavaScript。)
  • @BarryDysert - 你不应该编译 JavaScript。我已经用一个完整的、经过测试的页面更新了我的答案。
  • 感谢 gilly3,让世界变得与众不同:-)
【解决方案2】:

感谢大家的意见。事实证明,大多数想法都是可行的。我的问题是直到方法完成后才意识到警报框没有弹出(事后看来是有道理的)。我最终使用了最简单的想法,即,

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

【讨论】:

  • 明确一点...您的调试器在服务器上运行??
  • 不,但既然你提到了,我希望我知道如何在服务器上运行调试器!
【解决方案3】:

使用 ClientScriptManager.RegisterStartupScript 注册启动脚本。请参阅此 MSDN 文档http://msdn.microsoft.com/en-us/library/asz8zsxy.aspx

【讨论】:

  • 这可能会有所帮助。不过,Page_Load 脚本显然取代了我的代码隐藏页面中的 Page_Load C# 方法。这不好,因为我在 Page_Load 方法中执行了一些重要的事情。你能推动我让这个概念发挥作用吗?
  • 来自 MSDN:“RegisterStartupScript 方法添加的脚本块在页面完成加载但在引发页面的 OnLoad 事件之前执行。”我不希望它立即执行。我希望我的脚本只在我告诉它时执行。我该如何解决这个问题?
  • 需要查看更多代码才能提供任何真正的帮助。
【解决方案4】:

如果它在本地工作,但不在服务器上,则需要检查一些事项。如:

  1. 您的浏览器是否正在缓存页面?在页面上执行硬刷新 (ctrl+F5),然后重试。
  2. 您确定已部署代码吗?似乎是一件愚蠢的事情,但我们不得不问。随之而来的是后续行动:您确定将代码部署到正确的位置吗?
  3. 您是否遇到了 javascript 错误?

【讨论】:

  • 我已经完成了 ctrl+F5,但这并没有帮助。是的,我确信代码部署正确。 (应用程序使用表单验证,并且登录表单即将出现。在我过去之后,我试图显示一个“消息框”。)
【解决方案5】:

我更喜欢使用

Page.ClientScript.RegisterStartupScript(GetType(String), "myScript", "alert('" & s.Replace("'", "'+String.fromCharCode(39)+'") & "')", True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 2018-03-03
    • 2011-10-15
    • 2021-09-04
    • 2013-03-18
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多