Pregunta

Tengo una aplicación web ASP.NET y quería saber cómo podría mostrar un cuadro de mensaje de error cuando se produce una excepción.

Por ejemplo,

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

[El cuadro de mensaje muestra el error]

Gracias

¿Fue útil?

Solución

No puede mostrar razonablemente un cuadro de mensaje en la computadora del cliente o en el servidor. Para la computadora del cliente, querrá redirigir a una página de error con un mensaje de error apropiado, tal vez incluyendo el mensaje de excepción y el seguimiento de la pila si lo desea. En el servidor, es probable que desee realizar algunos registros, ya sea en el registro de eventos o en un archivo de registro.

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

Tenga en cuenta que el " log " usted tendría que implementarlo anteriormente, tal vez utilizando log4net o alguna otra utilidad de registro.

Otros consejos

No puede simplemente llamar a messagebox.write porque está desconectado del cliente. Debe registrar el código de JavaScript que muestra un cuadro de mensaje:

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

usando MessageBox.Show () causaría que se muestre un cuadro de mensaje en el servidor y que el hilo no procese más solicitudes a menos que el cuadro esté cerrado.

Lo que puedes hacer es,

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

esto mostraría la excepción en el lado del cliente, siempre que la excepción no esté burbujeada.

La forma en que he hecho esto en el pasado es llenar algo en la página con información cuando se lanza una excepción. MessageBox es para formularios de Windows y no se puede usar para formularios web. Supongo que podría poner algo de JavaScript en la página para hacer una alerta:

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

No creo que quiera mostrar los detalles de la excepción. Tuvimos que dejar de hacerlo porque uno de nuestros clientes no quería que sus usuarios vieran todo lo que estaba disponible en el detalle de la excepción. Intente mostrar una ventana de JavaScript con información que explique que ha habido un problema.

Si desea manejar todos sus errores en un solo lugar, puede usar el archivo global.asax (también conocido como archivo de aplicación global) de su aplicación web y trabajar con el evento de error de la aplicación. Va así: primero agrega el archivo de aplicación global a su proyecto, luego, en el evento Application_Error, coloca un código de manejo de errores, como este:

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

Esto registrará los detalles técnicos de su excepción en el registro de eventos del sistema (si necesita verificar el error más adelante) Luego, en su ErrorPage.aspx, captura el mensaje de excepción de la cadena de consulta en el evento Page_Load. La forma de mostrarlo depende de usted (puede usar la alerta de JavaScript sugerida en las otras respuestas o simplemente pasar el texto a un literal asp.net

Espero su ayuda. Saludos

Si está utilizando .NET Core con MVC y Razor, tiene varios niveles de preprocesamiento antes de que se renderice su página. Luego le sugiero que intente ajustar un mensaje de error condicional en la parte superior de su página de visualización, de esta manera:

En ViewController.cs:

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

En View.cshtml:

@if (ViewData["errors"].Equals(""))
{
    @:<p>Everything is fine.</p>
}
else
{
    @:<script>alert('@ViewData["errors"]');</script>
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top