2012-03-15 15 views
24

W postaci okien asp.net tworzy aplikację w kodzie C# za można użyć:ASP.NET Web Application Message Box

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

Czy istnieje odpowiednik w aplikacji sieci web ASP.NET? Czy mogę wywołać coś z kodu C#, który wyświetli użytkownikowi okno komunikatu?

Przykładowe użycie tego: Mam przycisk, który ładuje plik z kodem. Kiedy plik jest załadowany lub wystąpił błąd, chciałbym wyskoczyć wiadomość do użytkownika podając wynik.

Wszelkie pomysły na ten temat?

Odpowiedz

58

Chcesz użyć alertu. Niestety nie jest tak przyjemny jak w przypadku formularzy okien.

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

podobne do tego pytania tutaj: http://forums.asp.net/t/1461308.aspx/1

+1

Co to jest myStringVariable ?? – adityawho

+3

myStringVariable to tylko ciąg znaków. Zostanie ustawiony na wiadomość, którą chcesz wyświetlić. – Gage

+0

@Gage Po wyświetleniu okna komunikatu po wywołaniu zdarzenia użytkownik otrzymuje przycisk "OK". Czy mimo to należy podłączyć Response.Redirect ("desired/path.aspx"); do tego? – JsonStatham

2

niezupełnie. Kod po stronie serwera dzieje się na serwerze --- możesz użyć javascript do wyświetlenia czegoś użytkownikowi po stronie klienta, ale oczywiście będzie to działać tylko po stronie klienta. Taka jest natura technologii internetowej serwera klienta. Po otrzymaniu odpowiedzi jesteś zasadniczo odłączony od serwera.

3

Istnieje kilka opcji, aby utworzyć messagebox po stronie klienta w ASP.NET - patrz here, here i here na przykład ...

2

Dlaczego nie należy używać jquery popup do tego celu. W tym celu używam bpopup. Więcej informacji na ten temat.
http://dinbror.dk/bpopup/

1

Istnieje kilka rozwiązań; jeśli są wygodne z CSS, tutaj jest to bardzo elastyczne rozwiązanie:

Utwórz odpowiednio stylizowany Panel, który przypomina „Message Box”, umieścić Label w nim i ustawić jego właściwość falseVisible. Następnie, gdy użytkownik musi pojawić się komunikat po odświeżenie (na przykład naciśnięcie przycisku), w kodzie ustaw Label s Text właściwość żądany komunikat błędu i ustawić Panel jest Visible właściwość true.

-2

Kliknij prawym przyciskiem myszy eksploratora rozwiązań i wybierz Dodaj okno dialogowe reference.one pojawi się. W tym wybierz (.net)-> System.windows.form. Importuje System.Windows.Forms (vb) i używa System.windows.forms(C#) skopiuj to w swoim kodowaniu, a następnie napisz messagebox.show("").

+3

-1: WinForms nie pomoże w kodzie serwera WWW. – Richard

+1

Richard jest poprawny. Nie rób tego. Spowoduje to wyświetlenie okna komunikatu na serwerze. –

-3

Wystarczy dodać przestrzeń nazw:

System.Windows.forms 

odniesieniu do internetowej aplikacji lub co kiedykolwiek, i masz dostęp do listy:

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

ja spróbowałem i to działało.

Powodzenia.

+2

LOL, NIE! Spowoduje to wyświetlenie okna komunikatu na serwerze. –

-1

jeśli będzie to

System.Windows.forms 

jako nazw to będzie konflikt. Zastosowanie

btn_click() 
{ 

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

} 
+6

Nie! Spowoduje to wyświetlenie okna komunikatu na serwerze. –

13

Albo stworzenie sposobu takiego w swojej rozwiązanie:

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>" 
     ); 
    } 
} 

Następnie można używać go jak:

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

Otrzymuję "Metoda rozszerzenia musi być statyczna." Dowolny pomysł? – usefulBee

+0

@usefulBee: Zapomniałeś dodać 'static' między' public' i 'void'. – Heinzi

+0

Nie dokładnie prawda. Klasa tworzy metodę rozszerzającą obiekt strony. Możesz wywołać to za pomocą instancji strony: this.Show ("Tutaj jest moja wiadomość") lub podać stronę jako parametr: MessageBox.Show (this, "Here is my message") – flodis

9

tylko dla rekordów.

Here is a link from Microsoft że myślę, że to najlepszy sposób, aby przedstawić MessageBox w ASP.Net

także prezentuje wyborów jak Tak i NO.

Instrukcje dotyczące sposobu, aby uzyskać klasę z link pracy nad projektem:

  1. Jeśli nie masz folderu App_Code na swój projekt, utwórz go.
  2. Kliknij prawym przyciskiem myszy folder App_Code i utwórz klasę. Imię to MessageBox.cs
  3. skopiować tekst ze MessageBox.cs pliku (from the attached code) i wklej go na swojej MessageBox.cs plików.
  4. Wykonaj czynności opisane w krokach 2 & 3 dla pliku MessageBoxCore.cs.
  5. Ważne: Kliknij prawym przyciskiem każdy plik MessageBox.cs i MessageBoxCore.cs i upewnij się, że 'Build Action' jest ustawiony na kompilacji
  6. Dodaj ten kod do swojej aspx strona, na której chcesz wyświetlić okno komunikatu:

    <asp:Literal ID="PopupBox" runat="server"></asp:Literal> 
    
  7. Dodaj ten kod na Tobie cs strona, na której chcesz decyzji należy dokonać:

    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. Dodaj tę metodę do cs stronie. To zostanie wykonane, gdy użytkownik kliknie Tak. Nie trzeba tworzyć kolejnego dla metody 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. Dodaj plik WebUserControl1.ascx na swojej ścieżce root i dodać ten kod do pliku:

    <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. Dodaj tę linię na górze aspx strony:

    <%@ Register src="~/MessageBoxUserControl.ascx" tagname="MessageBoxUserControl" tagprefix="uc1" %> 
    
  11. Dodaj tę linię wewnątrz swojego aspx strona (Wewnątrz asp: Content tag jeśli masz)

    <uc1:MessageBoxUserControl ID="MessageBoxUserControl1" runat="server" /> 
    
  12. zapisać pliki obrazów 1.jpg, 2.jpg, 3.jpg, 4.jpg z projektu Microsoft powyższe na swojej drodze ~/Images/.

  13. Sporządzono

Nadzieję, że to pomaga.

Pablo

+1

To działało dla mnie, i to oficjalnie jest to rozwiązanie MS. – Fandango68

+0

Nie działa z updatepanel – Somebody

+0

Czy to działa dla VisualStudio 2005 i ASP.net 2? – Fandango68

1

'ASP.net MessageBox

' Dodaj ScriptManager do strony ASP.NET

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

try:

{ 

    string sMsg = "My Message"; 

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

} 
0

Trzeba odwołać się do nazw


using System.Windows.Form; 

a następnie dodać w kodzie

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

    } 
+0

niewłaściwy sposób to zrobić ... –

1

Jak inni już wspomniano, okno komunikatu będzie stronie klienta JavaScript. Tak więc problemem jest, jak zmusić skrzynkę komunikatów JS klienta ze strony serwera. Prostym rozwiązaniem jest umieszczenie tego w HTML:

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

i do wypełnienia tej data od strony serwera kodu źródłowego:

public partial class PageName : Page 
{ 
    protected string JsData = "your message"; 

pamiętać, że wartość ciąg powinien być ciąg JavaScript, tj być jednolinijkowym, ale może zawierać zbiegające znaki nowej linii jako \n.

Teraz możesz wykorzystać wszystkie swoje umiejętności i sztuczki z JavaScriptu lub JQuery, aby zrobić cokolwiek zechcesz za pomocą tego tekstu wiadomości na kliencie, na przykład wyświetlaj prosty alert(), jak pokazano w powyższym przykładzie kodu lub wyrafinowane pole wiadomości lub wiadomość transparent.

(Zauważ, że wyskakujące okienka są czasami mile widziana i zablokowane)

Należy również zauważyć, że ze względu na protokół HTTP, wiadomości mogą być wyświetlane tylko w odpowiedzi na żądanie HTTP, że użytkownik wysyła do serwera. W przeciwieństwie do aplikacji WinForm, serwer WWW nie może wysłać wiadomości do klienta, gdy uzna to za stosowne.

Jeśli chcesz wyświetlić wiadomość tylko raz, a nie po tym, jak użytkownik odświeży stronę za pomocą F5, możesz ustawić i odczytać plik cookie z kodem javascript. W każdym razie, zaletą tej metody jest to, że jest to łatwy sposób na uzyskanie danych z serwera do javascript na kliencie i że możesz użyć wszystkich funkcji javascript, aby osiągnąć wszystko, co chcesz.