Question

J'ai une application Web ASP.NET et je voulais savoir comment afficher un message d'erreur lorsqu'une exception est levée.

Par exemple,

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

[La boîte de message indique l'erreur]

Merci

Était-ce utile?

La solution

Vous ne pouvez pas raisonnablement afficher une boîte de message sur l'ordinateur du client ou sur le serveur. Pour l'ordinateur du client, vous souhaiterez rediriger vers une page d'erreur avec un message d'erreur approprié, comprenant peut-être le message d'exception et une trace de pile si vous le souhaitez. Sur le serveur, vous souhaiterez probablement vous connecter, soit au journal des événements, soit à un fichier journal.

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

Notez que le & log; log " ci-dessus devrait être mis en œuvre par vous, peut-être en utilisant log4net ou un autre utilitaire de journalisation.

Autres conseils

Vous ne pouvez pas simplement appeler messagebox.write car vous êtes déconnecté du client. Vous devez enregistrer du code javascript qui affiche une boîte de message:

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

utiliser MessageBox.Show () provoquerait l'affichage d'une boîte de message sur le serveur et empêcherait le thread de traiter d'autres demandes à moins que la boîte ne soit fermée.

Ce que vous pouvez faire est,

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

ceci afficherait l'exception côté client, à condition que l'exception ne soit pas masquée.

Par le passé, j'ai utilisé cette méthode pour renseigner des informations sur la page lorsqu'une exception est générée. MessageBox est destiné aux formulaires Windows et ne peut pas être utilisé pour les formulaires Web. Je suppose que vous pourriez mettre du javascript sur la page pour faire une alerte:

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

Je ne pense pas que vous souhaitiez afficher les détails de l'exception. Nous avons dû cesser de le faire car l'un de nos clients ne souhaitait pas que leurs utilisateurs voient tout ce qui était disponible dans les détails de l'exception. Essayez d’afficher une fenêtre javascript contenant des informations expliquant qu’il ya eu un problème.

Si vous souhaitez gérer toutes vos erreurs en un seul endroit, vous pouvez utiliser le fichier global.asax (également appelé fichier d’application globale) de votre application Web et utiliser l’événement d’erreur d’application. Cela ressemble à ceci Commence par ajouter le fichier d’application global à votre projet, puis, lors de l’événement Application_Error, un code de traitement des erreurs, comme ceci:

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

Ceci enregistrera les détails techniques de votre exception dans le journal des événements système (si vous devez vérifier l'erreur ultérieurement). Ensuite, sur votre ErrorPage.aspx, vous capturez le message d'exception de la chaîne de requête de l'événement Page_Load. Vous pouvez choisir comment l’afficher (vous pouvez utiliser l’alerte javascript proposée sur les autres réponses ou simplement transmettre le texte à un littéral asp.net

J'espère que son aide. À la vôtre

Si vous utilisez .NET Core avec MVC et Razor, il existe plusieurs niveaux de prétraitement avant le rendu de votre page. Ensuite, je vous suggère d'essayer de placer un message d'erreur conditionnel en haut de votre page d'affichage, comme suit:

Dans ViewController.cs:

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

Dans View.cshtml:

@if (ViewData["errors"].Equals(""))
{
    @:<p>Everything is fine.</p>
}
else
{
    @:<script>alert('@ViewData["errors"]');</script>
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top