2012-03-15 97 views
24

在一个asp.net Windows窗体应用程序,在C#代码后面你可以使用:ASP.NET Web应用程序的消息框

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

有一个asp.net web应用程序的任何等同? 我可以从后面的C#代码中调用一些东西,它会向用户显示一个消息框吗?

此示例的用法:我有一个按钮,用于在后面的代码中加载文件。当文件被加载或者如果有错误,我想弹出消息给用户说明结果。

对此的任何想法?

回答

58

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

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

这个问题在这里类似:http://forums.asp.net/t/1461308.aspx/1

+1

什么是myStringVariable? – adityawho 2013-03-23 05:11:11

+3

myStringVariable只是一个字符串。它将被设置为您希望显示的消息。 – Gage 2013-03-25 20:02:10

+0

@Gage在事件被触发后,当消息框打开时,用户会看到一个'OK'按钮。无论如何要连接一个Response.Redirect(“desired/path.aspx”);对此? – JsonStatham 2014-07-25 14:30:17

2

不是真的。服务器端代码发生在服务器上---你可以使用javascript在客户端显示某些东西给用户,但显然它只会在客户端执行。这是客户端服务器Web技术的本质。当你得到你的回应时,你基本上与服务器断开连接。

3

有几个选项来创建ASP.NET客户端的消息框 - 见hereherehere例如...

2

为什么不应该为此使用jQuery弹出窗口。我使用bpopup来实现此目的。请参阅关于此的更多信息。
http://dinbror.dk/bpopup/

1

有几个解决方案;如果您熟悉CSS,这里是一个非常灵活的解决方案:

创建一个适当的风格Panel类似于“消息盒子”,把一个Label在它和它的Visible属性设置为false。然后每当用户需要查看的消息后回传(例如按下按钮),从代码隐藏在Label小号Text属性设置为所需的错误消息,并且PanelVisible属性设置为true

-2

右键单击解决方案资源管理器,然后选择添加reference.one对话框将会出现。在那个选择(.net)-> System.windows.form。进口System.Windows.Forms (vb)和使用System.windows.forms(C#)复制此代码,然后写messagebox.show("")

+3

-1:WinForms不会帮助Web服务器代码。 – Richard 2013-10-19 10:58:32

+1

Richard是正确的。不要这样做。这将在服务器上显示消息框。 – 2013-11-12 08:17:09

-3

只需将命名空间添加:

System.Windows.forms 

到Web应用程序的参考或什么都和你有访问您:

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

我想它和它的工作。

祝你好运。

+2

哈哈,不!这将显示服务器上的消息框。 – 2013-11-12 08:16:09

-1

,如果你将包括

System.Windows.forms 

的命名空间,然后它会发生冲突。 使用

btn_click() 
{ 

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

} 
+6

不!这将在服务器上显示消息框。 – 2013-11-12 08:16:47

13

或创建解决方案这样的方法:

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"); 
+0

我得到“扩展方法必须是静态的。”任何想法? – usefulBee 2015-04-13 17:13:09

+0

@usefulBee:你忘了在'public'和'void'之间添加'static'。 – Heinzi 2017-03-17 14:23:20

+0

不完全正确。 该类为页面对象创建扩展方法。你可以使用页面实例调用它:this.Show(“这是我的消息”)或提供页面作为参数:MessageBox.Show(this,“Here is my message”) – flodis 2017-09-15 08:37:02

9

只是为了记录。

Here is a link from Microsoft,我认为是提出一个的MessageBoxASP.Net

最好的办法还它呈现像NO选择。

说明如何获得从link制作项目类:

  1. 如果你没有对你的项目的App_Code文件夹,创建它。
  2. 右键单击App_Code文件夹并创建一个类。将它命名为MessageBox.cs
  3. 复制从MessageBox.cs文件(from the attached code),并粘贴在你的MessageBox.cs文件中的文本。
  4. 请按照步骤2 & 3为MessageBoxCore.cs文件。
  5. 重要:右键单击每个文件MessageBox.csMessageBoxCore.cs并确保'建设行动'设置为编译
  6. 将此代码添加到您的ASPX页面,您要在其中显示消息框:

    <asp:Literal ID="PopupBox" runat="server"></asp:Literal> 
    
  7. 将此代码添加到您的要进行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); 
    
  8. 此方法添加到您的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; 
    } 
    
  9. 一个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. 
    
  10. 添加此行对你ASPX页的顶部:

    <%@ Register src="~/MessageBoxUserControl.ascx" tagname="MessageBoxUserControl" tagprefix="uc1" %> 
    
  11. 将此行添加到您的ASPX页面(里面你ASP:内容标签,如果你有一个)

    <uc1:MessageBoxUserControl ID="MessageBoxUserControl1" runat="server" /> 
    
  12. 保存图像文件1.jpg, 2.jpg, 3.jpg, 4.jpg从Microsoft Project上方到您的~/Images/路径。

  13. 完成

希望它能帮助。

巴勃罗

+1

这对我来说很有效,它无论如何都是正式的MS解决方案。 – Fandango68 2014-11-04 04:00:06

+0

没有用updatepanel – Somebody 2016-07-14 18:28:32

+0

这个工作适用于VisualStudio 2005和ASP.net 2吗? – Fandango68 2016-11-23 02:50:25

1

'ASP.net的MessageBox

' 一个ScriptManager添加到ASP.Net页面

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

尝试:

{ 

    string sMsg = "My Message"; 

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

} 
0

您需要引用命名空间


using System.Windows.Form; 

,然后在代码

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

    } 
+0

错误的做法... – 2015-04-25 20:58:04

1

加为他人已经指出,一个消息框将是客户方的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功能来完成您喜欢的任何事情。

相关问题