Pergunta

Tenho uma aplicação web ASP.NET, e eu queria saber como eu poderia exibir uma caixa de mensagem de erro quando uma exceção é lançada.

Por exemplo,

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

[Os shows caixa de mensagem de erro]

Obrigado

Foi útil?

Solução

Você não pode razoavelmente exibir uma caixa de mensagem, quer no computador do cliente ou no servidor. Para o computador do cliente, você vai querer redirecionar para uma página de erro com uma mensagem de erro apropriada, talvez incluindo a mensagem de exceção e rastreamento de pilha, se quiser. No servidor, você provavelmente vai querer fazer alguma exploração madeireira, quer para o registo de eventos ou para um arquivo de log.

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

Note que o "log" acima teria de ser implementada por você, talvez usando log4net ou algum outro utilitário de registro.

Outras dicas

Você não pode apenas chamar messagebox.write causa que você está desconectado do cliente. Você deve registrar o código JavaScript que mostra um messagebox:

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

usando MessageBox.Show () faria com que uma caixa de mensagem para ser exibida no servidor e parar o segmento de processamento de novo pedido, a menos que a caixa está fechada.

O que você pode fazer é,

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

este iria mostrar a exceção no lado do cliente, desde que a exceção não é borbulhado.

A maneira que eu fiz isso no passado é para preencher algo na página com informações quando uma exceção é lançada. MessageBox é para Windows Forms e não pode ser usado para formulários web. Eu suponho que você poderia colocar um pouco de javascript na página para fazer um alerta:

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

Eu não acho que você gostaria de mostrar os detalhes da exceção. Tivemos que parar de fazer isso porque um dos nossos clientes não querem que seus usuários vejam tudo o que estava disponível no detalhe exceção. Tente exibindo uma janela de javascript com algumas informações nele explicando que houve um problema.

Se você quiser lidar com todo o seu erro em um único lugar, você pode usar o arquivo global (também conhecido como arquivo de aplicação global) do seu webapplication, e trabalhar com o evento de erro de aplicação. É assim Firts você adicionar o arquivo do aplicativo global para o seu projeto, em seguida, no evento Application_Error você colocar algum erro de manipulação de código, 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));
}

Este irá registrar os detalhes técnicos de sua exceção no log de eventos do sistema (se você precisa verificar o erro mais tarde) Em seguida, em seu ErrorPage.aspx você capturar a mensagem de exceção do querystring no evento Page_Load. Como exibi-lo é com você (você pode usar o alerta javascript sugerido nas outras respostas ou simples passar o texto a um asp.net literal

Hope sua ajuda. Felicidades

Se você estiver usando .NET núcleo com MVC e Razor, você tem vários níveis de pré-processamento antes de sua página é processada. Então eu sugiro que você tentar envolver uma mensagem de erro condicional no topo de sua página de visualização, assim:

Em ViewController.cs:

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

Em View.cshtml:

@if (ViewData["errors"].Equals(""))
{
    @:<p>Everything is fine.</p>
}
else
{
    @:<script>alert('@ViewData["errors"]');</script>
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top