2012-03-25 12 views
2

Ich verwende den folgenden Code, um Ausnahmen in meinem Formview zu löschen. Das Problem ist, ich möchte dem Benutzer eine einfache Erklärung geben, sollte ein Fehler auftreten, aber ich kann keinen Weg finden, dies einfach zu tun. Ich sollte sagen, ich bin neu in ASP.NET. In der Vergangenheit hätte ich eine ERROR_NO verwendet, um Fehler zu erfassen, aber ich kann das Äquivalent hier nicht finden. Ich kann sehen, dass e.Exception.Message gibt die Fehlerinformationen, aber ich kann dies dem Benutzer nicht geben! ...Benutzerfreundliche Ausnahmebedingungsnachrichten geben

EG: e.Exception.Message gibt "Die DELETE-Anweisung im Konflikt mit der REFERENZ-Einschränkung" FK_users_offices ". Der Konflikt trat in der Datenbank" xyz ", Tabelle" dbo.Users ", Spalte" OfficeID "auf. Die Anweisung wurde beendet."

Gibt es eine Möglichkeit, diese Ausnahme zu identifizieren und sie abzufangen, um etwas wie "Dieses Büro kann nicht gelöscht werden, da abhängige Benutzer existiert" anzuzeigen. beispielsweise?

Mein entsprechenden Code hinter ist:

protected void fv_OnItemDeleted(Object sender, FormViewDeletedEventArgs e) 
    { 
     if (e.Exception == null) 
     { 
      if (e.AffectedRows == 1) 
      { 
       lblMessage.Text="Record deleted successfully."; 
      } 
      else 
      { 
       lblMessage.Text = "An error occurred during the delete operation."; 
      } 
     } 
     else 
     { 
      lblMessage.Text=e.Exception.Message; 
      e.ExceptionHandled = true; 
     } 

     UserMessage.Visible = true; // Display Error message to user 
    } 
+3

http://stackoverflow.com/questions/8910197/user-friendly-error-messages-when-removing-row-with-foreign-key-reference-constr und http://stackoverflow.com/ Fragen/7944559/how-to-manipulieren-sqlexception-message-in-benutzerfreundliche Nachricht –

Antwort

1

Sie können den Ausnahmetyp überprüfen und Rückmeldungen an Benutzer nach Ausnahmetyp. Etwas wie;

protected void fv_OnItemDeleted(Object sender, FormViewDeletedEventArgs e) 
{ 

    if (e.Exception == null) 
    { 
     if (e.AffectedRows == 1) 
     { 
      lblMessage.Text="Record deleted successfully."; 
     } 
     else 
     { 
      lblMessage.Text = "An error occurred during the delete operation."; 
     } 
    } 
    else 
    { 
     lblMessage.Text=e.Exception.Message; 
     if(e.Exception.GetType() == typeof(System.StackOverflowException)) 
      lblMessage.Text = "Some stackoverflowexception occured, report to admin etc."  
     if(e.Exception.GetType() == typeof(System.ArgumentNullException)) 
      lblMessage.Text = "Some argument exception occured" 

     e.ExceptionHandled = true; 
    } 

    UserMessage.Visible = true; // Display Error message to user 
} 
+0

Bitte beachten Sie, dass es, wenn es keine Stackoverflow oder Argumentnullexception ist, immer noch die detaillierte Nachricht, die für normale Benutzer versteckt werden soll. –

+0

@JPHellemons Ich stimme Ihnen zu, eine Standardnachricht kann dem Benutzer angezeigt werden, anstatt die ursprüngliche Ausnahmebedingungsnachricht anzuzeigen, wenn dies der Fall ist. – daryal

+0

Ok vielen Dank für Ihre Bemühungen. Es scheint, dass es keinen einfachen Weg gibt. Was ist mit guten alten Fehlernummern passiert ?? !! – gaw

Verwandte Themen