Frage

Ich habe eine ASP.NET Web-Anwendung, und ich wollte wissen, wie ich konnte eine Fehlermeldungsfeld angezeigt wird, wenn eine Ausnahme ausgelöst wird.

Beispiel:

        try
        {
            do something
        }
        catch 
        {
            messagebox.write("error"); 
            //[This isn't the correct syntax, just what I want to achieve]
        }

[Das Meldungsfeld zeigt den Fehler]

Danke

War es hilfreich?

Lösung

Sie können vernünftigerweise nicht ein Meldungsfeld angezeigt werden entweder auf dem Computer des Client oder dem Server. Für den Computer des Client, sollten Sie auf eine Fehlerseite mit einer entsprechenden Fehlermeldung umgeleitet werden, vielleicht die Ausnahmemeldung und Stack-Trace einschließlich, wenn Sie wollen. Auf dem Server werden Sie wahrscheinlich wollen einige Protokollierung zu tun, entweder in das Ereignisprotokoll oder in eine Protokolldatei.

 try
 {
     ....
 }
 catch (Exception ex)
 {
     this.Session["exceptionMessage"] = ex.Message;
     Response.Redirect( "ErrorDisplay.aspx" );
     log.Write( ex.Message  + ex.StackTrace );
 }
Hinweis

, dass die „lügt“ oben würde von Ihnen umgesetzt werden müssen, vielleicht log4net oder ein anderes Logging-Programm.

Andere Tipps

Sie können nicht einfach anrufen messagebox.write führen, dass Sie vom Client getrennt sind. Sie sollten Javascript-Code registrieren, die eine messagebox zeigt:

this.RegisterClientScriptBlock(typeof(string), "key",  string.Format("alert('{0}');", ex.Message), true);

using MessageBox.Show () würde ein Meldungsfeld verursacht in dem Server zu zeigen, und den Faden aus der Verarbeitung von weiterer Anforderung zu stoppen, wenn die Box geschlossen ist.

Was Sie tun können, ist,

this.Page.ClientScript.RegisterStartupScript(this.GetType(),"ex","alert('" + ex.Message + "');", true);

dies die Ausnahme in Client-Seite zeigen würde, sofern die Ausnahme nicht gesprudelt wird.

So wie ich dies in der Vergangenheit getan habe, ist etwas auf der Seite mit Informationen zu füllen, wenn eine Ausnahme ausgelöst wird. MessageBox ist für Windows Forms und kann nicht für Web-Formulare verwendet werden. Ich nehme an, Sie auf der Seite einige Javascript setzen könnte eine Warnung zu tun:

Response.Write("<script>alert('Exception: ')</script>");

Ich denke nicht, dass Sie die Details der Ausnahme zeigen möchte. Wir mussten dies zu tun stoppen, weil einer unserer Kunden nicht ihre Nutzer wollen alles sehen, die in der Ausnahme Detail zur Verfügung stand. Versuchen Sie die Anzeige ein Javascript-Fenster mit einigen Informationen in ihm zu erklären, dass es ein Problem gewesen ist.

Wenn Sie an einem einzigen Ort all Ihre Fehler behandeln wollen, können Sie die Datei global.asax verwenden Ihre Webapplikation (auch als globale Anwendungsdatei bekannt), und die Arbeit mit dem Anwendung Fehlerereignis. Es geht so FIRTS Sie die globale Anwendungsdatei zu Ihrem Projekt hinzufügen, dann auf das Ereignis Application_Error Sie Behandlungs-Code einige Fehler setzen, wie folgt aus:

    void Application_Error(object sender, EventArgs e) 
{
    Exception objErr = Server.GetLastError().GetBaseException();
    string err = "Error Caught in Application_Error event\n" +
            "Error in: " + Request.Url.ToString() +
            "\nError Message:" + objErr.Message.ToString() +
            "\nStack Trace:" + objErr.StackTrace.ToString();
    System.Diagnostics.EventLog.WriteEntry("Sample_WebApp", err, System.Diagnostics.EventLogEntryType.Error);
    Server.ClearError();
    Response.Redirect(string.Format("{0}?exceptionMessage={1}", System.Web.VirtualPathUtility.ToAbsolute("~/ErrorPage.aspx"), objErr.Message));
}

Damit werden die technischen Details Ihrer Ausnahme in das Systemereignisprotokoll log (wenn Sie später den Fehler überprüfen müssen) Dann auf Ihrem ErrorPage.aspx erfassen Sie die Ausnahmemeldung vom Abfragezeichenfolgeflag auf dem Ereignis Page Load. Wie es angezeigt, um Sie up (Sie können der JavaScript-Alarm verwenden, um auf den anderen Antworten oder einfachen Pass den Text in einem asp.net wörtlichen vorgeschlagen

Hoffnung sein kann. Prost

Wenn Sie .NET-Core mit MVC und Razor verwenden, haben Sie mehrere Ebenen der Vorverarbeitung vor Ihrer Seite gerendert wird. Dann schlage ich vor, dass Sie versuchen, eine bedingte Fehlermeldung an der Spitze Ihrer Ansicht Seite Einwickeln, etwa so:

In ViewController.cs:

if (file.Length < 800000)
{
    ViewData["errors"] = "";
}
else
{
    ViewData["errors"] = "File too big. (" + file.Length.ToString() + " bytes)";
}

In View.cshtml:

@if (ViewData["errors"].Equals(""))
{
    @:<p>Everything is fine.</p>
}
else
{
    @:<script>alert('@ViewData["errors"]');</script>
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top