5

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

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

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

4

5 回答 5

10

我发现警报框很烦人。只需使用 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;
    }
}
于 2013-04-29T20:43:59.837 回答
8

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

Response.Write("<script>alert('" + msg + "')</script>");
于 2013-04-30T14:36:51.470 回答
0

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

  1. 您的浏览器是否正在缓存页面?在页面上执行硬刷新 ( ctrl+ F5) 并重试。
  2. 您确定代码已部署吗?似乎是一件愚蠢的事情,但我们不得不问。随之而来的是跟进:您确定代码已部署到正确的位置吗?
  3. 您是否遇到 javascript 错误?
于 2013-04-29T20:26:08.023 回答
0

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

于 2013-04-29T20:27:07.600 回答
0

我更喜欢使用

Page.ClientScript.RegisterStartupScript(GetType(String), "myScript", "alert('" & s.Replace("'", "'+String.fromCharCode(39)+'") & "')", True)
于 2018-05-28T13:25:16.493 回答