Domanda

Ho un'applicazione Web ASP.NET e volevo sapere come visualizzare una finestra di messaggio di errore quando viene generata un'eccezione.

Ad esempio,

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

[La finestra di messaggio mostra l'errore]

Grazie

È stato utile?

Soluzione

Non è possibile visualizzare ragionevolmente una finestra di messaggio sul computer client o sul server. Per il computer client, ti consigliamo di reindirizzare a una pagina di errore con un messaggio di errore appropriato, magari includendo il messaggio di eccezione e la traccia dello stack, se lo desideri. Sul server, probabilmente vorrai fare un po 'di registrazione, nel registro eventi o in un file di registro.

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

Nota che il " log " sopra dovrebbe essere implementato da te, magari usando log4net o qualche altra utility di registrazione.

Altri suggerimenti

Non puoi semplicemente chiamare messagebox.write perché sei disconnesso dal client. Dovresti registrare il codice javascript che mostra una finestra di messaggio:

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

l'utilizzo di MessageBox.Show () causerebbe la visualizzazione di una finestra di messaggio nel server e l'interruzione dell'ulteriore elaborazione del thread a meno che la casella non fosse chiusa.

Quello che puoi fare è

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

questo mostrerebbe l'eccezione sul lato client, a condizione che l'eccezione non sia gorgogliata.

Il modo in cui l'ho fatto in passato è quello di popolare qualcosa sulla pagina con informazioni quando viene generata un'eccezione. MessageBox è per moduli Windows e non può essere utilizzato per moduli Web. Suppongo che potresti mettere un po 'di javascript nella pagina per fare un avviso:

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

Non penso che vorresti mostrare i dettagli dell'eccezione. Abbiamo dovuto smettere di farlo perché uno dei nostri clienti non voleva che i loro utenti vedessero tutto ciò che era disponibile nei dettagli delle eccezioni. Prova a visualizzare una finestra JavaScript con alcune informazioni che spiegano che si è verificato un problema.

Se vuoi gestire tutti i tuoi errori in un unico posto, puoi usare il file global.asax (noto anche come file dell'applicazione globale) della tua applicazione web e lavorare con l'evento di errore dell'applicazione. In questo modo aggiungi il file dell'applicazione globale al tuo progetto, quindi sull'evento Application_Error inserisci un codice di gestione degli errori, come questo:

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

In questo modo i dettagli tecnici dell'eccezione verranno registrati nel registro eventi di sistema (se è necessario controllare l'errore in seguito) Quindi su ErrorPage.aspx acquisisci il messaggio di eccezione dalla stringa di query sull'evento Page_Load. Come visualizzarlo dipende da te (puoi utilizzare l'avviso javascript suggerito sulle altre risposte o semplicemente passare il testo a un letterale asp.net

Spero che il suo aiuto. Acclamazioni

Se si utilizza .NET Core con MVC e Razor, sono disponibili diversi livelli di preelaborazione prima del rendering della pagina. Quindi ti suggerisco di provare a racchiudere un messaggio di errore condizionale nella parte superiore della pagina di visualizzazione, in questo modo:

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>
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top