ASP.NET Web 应用程序消息框

Posted

技术标签:

【中文标题】ASP.NET Web 应用程序消息框【英文标题】:ASP.NET Web Application Message Box 【发布时间】:2012-03-31 23:38:57 【问题描述】:

在一个asp.net windows forms应用程序中,在后面的C#代码中可以使用:

MessageBox.Show("Here is my message");

在 asp.net 网络应用程序中是否有任何等价物? 我可以从后面的 C# 代码中调用一些东西来向用户显示一个消息框吗?

示例用法:我有一个按钮,可以在后面的代码中加载文件。当文件被加载或出现错误时,我想向用户弹出一条消息,说明结果。

对此有什么想法吗?

【问题讨论】:

【参考方案1】:

不是真的。服务器端代码发生在服务器上——您可以使用 javascript 在客户端向用户显示某些内容,但它显然只会在客户端执行。这是客户端服务器 Web 技术的本质。当您收到响应时,您基本上与服务器断开连接。

【讨论】:

【参考方案2】:

您想使用警报。不幸的是,它不如 Windows 窗体好。

ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + myStringVariable + "');", true);

此处与此问题类似:http://forums.asp.net/t/1461308.aspx/1

【讨论】:

什么是 myStringVariable?? myStringVariable 只是一个字符串。它将设置为您希望显示的消息。 @Gage 当消息框在事件被触发后打开时,用户会看到一个“确定”按钮。无论如何要连接 Response.Redirect("desired/path.aspx");到这个? 当我尝试这个时,我会得到No overload for method 'RegisterStartupScript' takes 4 arguments 如果你想使用来自网页的多条消息,你应该给它们命名,例如 myalert1、myalert2 等。如果你的消息包含单引号 ',它将不起作用,你必须替换其他字符,例如 |.【参考方案3】:

为什么不应该为此目的使用 jquery popup。我为此目的使用bpopup。查看更多信息。http://dinbror.dk/bpopup/

【讨论】:

【参考方案4】:

有几个解决方案;如果您对 CSS 感到满意,这里有一个非常灵活的解决方案:

创建一个样式适当的Panel,类似于“消息框”,将Label 放入其中并将其Visible 属性设置为false。然后,每当用户需要在回发(例如按下按钮)之后看到消息时,从代码隐藏中将Labels Text 属性设置为所需的错误消息并设置Panel' s Visible 属性到true

【讨论】:

【参考方案5】:

右键单击解决方案资源管理器并选择添加reference.one 对话框将出现。在那个选择(.net)-> System.windows.form。导入System.Windows.Forms (vb) 并使用System.windows.forms(C#) 将其复制到您的编码中,然后编写messagebox.show("")

【讨论】:

理查德是正确的。不要这样做。这会在服务器上显示消息框。【参考方案6】:

只需添加命名空间:

System.Windows.forms 

到您的 Web 应用程序参考或其他任何内容,并且您可以访问您的:

MessageBox.Show("Here is my message");

我试过了,效果很好。

祝你好运。

【讨论】:

【参考方案7】:

如果你将包括

System.Windows.forms

作为命名空间,那么它将发生冲突。 使用

btn_click()


System.Windows.Forms.MessageBox.Show("Hello");


【讨论】:

不!这会在服务器上显示消息框。【参考方案8】:

或者在你的解决方案中创建这样的方法:

public static class MessageBox 
    public static void Show(this Page Page, String Message) 
       Page.ClientScript.RegisterStartupScript(
          Page.GetType(),
          "MessageBox",
          "<script language='javascript'>alert('" + Message + "');</script>"
       );
    

然后你可以像这样使用它:

MessageBox.Show("Here is my message");

【讨论】:

我得到“扩展方法必须是静态的”。有什么想法吗? @usefulBee:你忘了在publicvoid之间添加static 不完全正确。该类创建 Page 对象的扩展方法。您可以使用页面实例调用它:this.Show("Here is my message") 或提供页面作为参数:MessageBox.Show(this, "Here is my message") 是的,但是当您在自己的页面类中工作时。那么你就不需要使用这个语句了【参考方案9】:

Here is a link from Microsoft 我认为是在 ASP.NET 中呈现 MessageBox 的最佳方式

它还提供“是”和“否”等选项。

关于如何从 link 获取课程的说明:

    如果您的项目中没有 App_Code 文件夹,请创建它。

    右键单击 App_Code 文件夹并创建一个类。将其命名为 MessageBox.cs

    MessageBox.cs 文件 (from the attached code) 复制文本并将其粘贴到您的 MessageBox.cs 文件中。

    MessageBoxCore.cs 文件执行与步骤 2 和 3 相同的操作。

    重要提示:右键单击每个文件MessageBox.csMessageBoxCore.cs并确保'Build Action' em> 设置为 编译

    将此代码添加到您要显示消息框的 aspx 页面:

     <asp:Literal ID="PopupBox" runat="server"></asp:Literal>
    

    将此代码添加到您要做出决定的 cs 页面上:

     string title = "My box title goes here";
     string text = "Do you want to Update this record?";
     MessageBox messageBox = new MessageBox(text, title, MessageBox.MessageBoxIcons.Question, MessageBox.MessageBoxButtons.YesOrNo, MessageBox.MessageBoxStyle.StyleA);
     messageBox.SuccessEvent.Add("YesModClick");
     PopupBox.Text = messageBox.Show(this);
    

    将此方法添加到您的 cs 页面。这是当用户单击是时将执行的操作。你不需要为NoClick 方法再做一个。

     [WebMethod]
     public static string YesModClick(object sender, EventArgs e)
     
         string strToRtn = "";
         // The code that you want to execute when the user clicked yes goes here
         return strToRtn;
     
    

    WebUserControl1.ascx 文件添加到您的根路径并将此代码添加到文件中:

     <link href="~/Styles/MessageBox.css" rel="stylesheet" type="text/css" />
     <div id="result"></div>
     <asp:ScriptManager runat="server" ID="scriptManager" EnablePageMethods="True">
     </asp:ScriptManager>  //<-- Make sure you only have one ScriptManager on your aspx page.  Remove the one on your aspx page if you already have one.
    

    在您的 aspx 页面顶部添加这一行:

    <%@ Register src="~/MessageBoxUserControl.ascx" tagname="MessageBoxUserControl" tagprefix="uc1" %>
    

    在你的 aspx 页面内添加这一行(如果你有的话,在你的 asp:Content 标签内)

    <uc1:MessageBoxUserControl ID="MessageBoxUserControl1" runat="server" />
    

    将上述 Microsoft 项目中的图像文件 1.jpg, 2.jpg, 3.jpg, 4.jpg 保存到您的 ~/Images/ 路径中。

【讨论】:

获取解析器错误消息:无法加载类型“CSASPNETMessageBox.MessageBoxUserControl”。 这个解决方案似乎非常适合我的问题......直到我点击链接并发现它们不再工作(感谢微软!)。任何人都可以在第 3 步和第 4 步中发布 MessageBox.cs 和 MessageBoxCore.cs 的代码吗?或者给我一个提示,该代码应该是什么样子?【参考方案10】:

'ASP.net 消息框

'向 ASP.Net 页面添加脚本管理器

<asp:scriptmanager id="ScriptManager1" runat="server" />

尝试:



  string sMsg = "My Message";

  ScriptManager.RegisterStartupScript(Page, Page.GetType, Guid.NewGuid().ToString(), "alert('" + sMsg + "')", true);


【讨论】:

【参考方案11】:

你需要引用命名空间


using System.Windows.Form;

然后在代码中添加

protected void Button1_Click(object sender, EventArgs e)
    
        MessageBox.Show(" Hi....");

    

【讨论】:

windows.Forms 不是 ASP.net 的一部分。完全不同的游戏 +1,这不是问题的正确答案,但会帮助将来在本地服务器上调试的人【参考方案12】:

正如其他人已经指出的那样,消息框将是客户端 Javascript。所以问题是如何从服务器端强制一个客户端 JS 消息框。一个简单的解决方案是将其包含在 html 中:

<script>
    var data = '<%= JsData %>';
    alert(data);
</script>

并从服务器端代码隐藏填充此data

public partial class PageName : Page

    protected string JsData = "your message";

请注意,字符串值应为 Javascript 字符串,即单行,但它可能包含转义换行符,如 \n

现在您可以使用所有 Javascript 或 JQuery 技能和技巧在客户端对消息文本做任何您想做的事情,例如显示简单的alert(),如上面的代码示例所示,或复杂的消息框或消息横幅。

(请注意,弹出窗口有时会被拒之门外)

还请注意,由于 HTTP 协议,该消息只能在响应用户发送到服务器的 HTTP 请求时显示。与 WinForm 应用程序不同,Web 服务器不能在它认为合适的时候向客户端推送消息。

如果您只想显示一次消息,而不是在用户使用 F5 刷新页面后,您可以使用 javascript 代码设置和读取 cookie。无论如何,这种方法的好处是它是一种从服务器获取数据到客户端 javascript 的简单方法,并且您可以使用所有 javascript 功能来完成您喜欢的任何事情。

【讨论】:

【参考方案13】:

这是我今天刚刚写的一个方法,这样我就可以向页面传递任意数量的消息框:

/// <summary>
/// Shows a basic MessageBox on the passed in page
/// </summary>
/// <param name="page">The Page object to show the message on</param>
/// <param name="message">The message to show</param>
/// <returns></returns>
public static ShowMessageBox(Page page, string message)

    Type cstype = page.GetType();

    // Get a ClientScriptManager reference from the Page class.
    ClientScriptManager cs = page.ClientScript;

    // Find the first unregistered script number
    int ScriptNumber = 0;
    bool ScriptRegistered = false;
    do
    
        ScriptNumber++;
        ScriptRegistered = cs.IsStartupScriptRegistered(cstype, "PopupScript" + ScriptNumber);
     while (ScriptRegistered == true);

    //Execute the new script number that we found
    cs.RegisterStartupScript(cstype, "PopupScript" + ScriptNumber, "alert('" + message + "');", true);

【讨论】:

以上是关于ASP.NET Web 应用程序消息框的主要内容,如果未能解决你的问题,请参考以下文章

查找文本框光标位置,行号。和列号。在 asp.net 中

ASP.NET Core Web API - JWT 消息处理程序 - 没有注册类型错误

将消息从 SSIS (2012) 包推送到 ASP.NET Web 应用程序中的 SignalR 集线器——最好的方法是啥?

ASP.NET 4.5 Web API 2.0,JWT 消息处理程序将状态 0 返回到 Angular 7 HTTP 拦截器

ASP.NET 2.0 嵌套数据网格?

csharp asp .net c#消息框