2012-03-15 183 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功能來完成您喜歡的任何事情。