2009-03-16 7 views

risposta

12

Non si può ragionevolmente visualizzare una finestra di messaggio o sul computer del client o server. Per il computer del cliente, ti consigliamo di reindirizzare a una pagina di errore con un messaggio di errore appropriato, magari includendo il messaggio di eccezione e la traccia di stack, se lo desideri. Sul server, probabilmente vorrai fare una registrazione, sia nel registro eventi che in un file di registro.

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

Si noti che il "log" di cui sopra avrebbe dovuto essere attuata da voi, magari utilizzando log4net o qualche altro programma di utilità di registrazione.

+0

@ tvanfosson - Non è che non possano visualizzare la message box sul lato server o sul lato client. Dovrebbero semplicemente evitare di farlo. :) – Ramesh

+0

@Ramesh - chiarito. – tvanfosson

12

Non è possibile chiamare solo messagebox.write perché si è disconnessi dal client. È necessario registrarsi codice javascript che mostra un messagebox:

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

Preferisco una pagina di errore separata se l'eccezione potrebbe causare problemi con il rendering della pagina richiesta. – tvanfosson

+0

Penso che dipenda dal contesto se un avviso o una pagina separata è la soluzione giusta. –

2

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

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

non potrebbe pensare che si vorrebbe vedere i dettagli del l'eccezione. Abbiamo dovuto smettere di farlo perché uno dei nostri clienti non voleva che i suoi utenti vedessero tutto ciò che era disponibile nei dettagli delle eccezioni. Prova a visualizzare una finestra di JavaScript con alcune informazioni che spiegano che c'è stato un problema.

4

utilizzando MessageBox.Show() causerebbe la visualizzazione di una finestra di messaggio nel server e interromperà l'elaborazione dell'ulteriore richiesta a meno che la casella non sia chiusa.

Che cosa si può fare è,

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

questo avrebbe mostrato l'eccezione nel lato client, purché l'eccezione non viene gorgogliare.

1

Se si desidera gestire tutti gli errori in un singolo punto, è possibile utilizzare il file global.asax (noto anche come file di applicazione globale) dell'applicazione Web e lavorare con l'evento di errore dell'applicazione. Va in questo modo FIRTS si aggiunge il file dell'applicazione globale per il progetto, quindi l'evento Application_Error si mette un po 'di codice di gestione degli errori, in questo modo:

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

Ciò registrerà i dettagli tecnici del vostro un'eccezione nel registro eventi di sistema (se è necessario verificare l'errore in un secondo momento) Quindi su ErrorPage.aspx si acquisisce il messaggio di eccezione dalla query quer durante l'evento Page_Load. Come visualizzarlo dipende da te (puoi usare l'avviso javascript suggerito sulle altre risposte o semplicemente passare il testo ad un asp.net letterale

Spero che il suo aiuto.Cheers

1

Se si utilizza .NET Core con MVC e Razor, si dispone di diversi livelli di preelaborazione prima del rendering della pagina. Allora ti suggerisco di provare avvolgendo un messaggio di errore condizionale in cima alla vostra 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> 
} 
Problemi correlati