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
。然后,每当用户需要在回发(例如按下按钮)之后看到消息时,从代码隐藏中将Label
s 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:你忘了在public
和void
之间添加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.cs和MessageBoxCore.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 Core Web API - JWT 消息处理程序 - 没有注册类型错误
将消息从 SSIS (2012) 包推送到 ASP.NET Web 应用程序中的 SignalR 集线器——最好的方法是啥?
ASP.NET 4.5 Web API 2.0,JWT 消息处理程序将状态 0 返回到 Angular 7 HTTP 拦截器