2017-02-20 3 views
0

In einer OnClick-Methode für eine Schaltfläche in einem ASP.NET-Webformular habe ich einen Anruf an Response.Redirect() was bewirkt, dass das System den Faden mit der Fehlermeldung abgebrochen:"Ausnahme ausgelöst: 'System.Threading.ThreadAbortException' in mscorlib.dll" bei Verwendung von Response.Redirect()

Exception thrown: 'System.Threading.ThreadAbortException' in mscorlib.dll 

Es gibt ein paar Fragen ähnlich wie diese hier, ihre Lösungen mit I geändert:

Response.Redirect("~/UI/Home.aspx"); 

zu

Response.Redirect("~/UI/Home.aspx", false); 
Context.ApplicationInstance.CompleteRequest(); 

Allerdings bekomme ich immer noch das gleiche Problem. Mit dem Debugger habe ich den Code durchlaufen und alles erfolgreich ausgeführt, bis ich Response.Redirect();

OnClick Funktion

protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     SiteUser s = null; 
     try 
     { 
      string email = txtEmail.Text; 
      string pwd = txtPwd.Text; 
      s = DBConnection.login(email, pwd);     
     } 
     catch (Exception ex) 
     { 
      Console.Write(ex); 
      lblLoginError.Text = "Error logging in."; 
     } 
     if (s != null) 
     { 
      Session["UserSession"] = s; 
      Response.Redirect("~/UI/Home.aspx", false); 
      Context.ApplicationInstance.CompleteRequest(); 
     } 
     else 
     { 
      lblLoginError.Text = "User not found. Please check your details and try again."; 
     } 
    } 

Irgendwelche Gedanken darüber, warum dies passiert sein könnte?

+1

'Response.Redirect()' * soll wirklich nicht *, dass die Ausnahme werfen, wenn das 'false' Argument ... – David

+0

Mögliches Duplikat [Warum Response.Redirect verursacht System.Threading.ThreadAbortException ?] (http://stackoverflow.com/questions/2777105/why-response-redirect-causes-system-threading-threadabortexception) –

+0

@Am_I_Hilfful Sehr ähnliches Problem, aber es wird nicht durch die Lösungen dort gelöst. –

Antwort

1

Ich habe dieses Problem in der Vergangenheit gesehen. wenn Sie diesen Code in der Theorie, verwenden, sollte es nicht passieren:

Response.Redirect(url, false); 
Context.ApplicationInstance.CompleteRequest(); 

aber sagen, dass ich immer noch diese manchmal, was wirklich überraschend. Ich vermute, dass es manchmal in Anwesenheit eines aktiven finally Blocks auftritt, um dem Code zu signalisieren, sich selbst zu reinigen, obwohl das für Sie nicht der Fall zu sein scheint.

Die beste Lösung, die ich finden könnte, ist, den Fehler zu finden und zu ignorieren.

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     SiteUser s = null; 
     try 
     { 
      string email = txtEmail.Text; 
      string pwd = txtPwd.Text; 
      s = DBConnection.login(email, pwd);     
     } 
     catch (Exception ex) 
     { 
      Console.Write(ex); 
      lblLoginError.Text = "Error logging in."; 
     } 
     if (s != null) 
     { 
      Session["UserSession"] = s; 
      Response.Redirect("~/UI/Home.aspx", false); 
      Context.ApplicationInstance.CompleteRequest(); 
     } 
     else 
     { 
      lblLoginError.Text = "User not found. Please check your details and try again."; 
     } 
    } 
    catch(System.Threading.ThreadAbortException) 
    { 
     //Do nothing. The exception will get rethrown by the framework when this block terminates. 
    } 
} 
+0

Danke für die Antwort! Leider scheint dies das Problem nicht zu beheben - es wird lediglich die Anmeldeseite neu geladen. –

0

Dies erwies sich als ein Problem sein, dass ich durch Umleitung zurück verursacht hatte, wenn die Sitzung nicht ein bestimmtes Element in der Zielseite, und in diesem Fall tat es nicht enthielt! Die Ausnahme wird weiterhin ausgelöst, verursacht jedoch keine sichtbaren Probleme mehr.

Dank

Verwandte Themen