144 votes

Impossible d'évaluer l'expression, parce que le code est optimisé ou un natif image est sur le dessus de la pile des appels

J'obtiens l'erreur:

Impossible d'évaluer l'expression, parce que le code est optimisé ou un natif image est sur le dessus de la pile d'appel.

J'ai redirigé vers une nouvelle page dans repeater itemcommand événement. L'erreur se produit à la ligne:

string url = "~/Galleries/AlbumImageList.aspx?UId=" + this.UserId.ToString() + "&AlbumId=" + e.CommandArgument.ToString();
Response.Redirect(url);

Quelqu'un peut-il m'aider? Est quelque chose de mal? L' _COMPlusExceptionCode est -532459699.

162voto

PrateekSaluja Points 7387
Request.Redirect(url,false);

false indique si l'exécution de la page en cours prend fin.

125voto

Radhi Points 1831

Faire second argument de l' Response faux comme indiqué ci-dessous.

Response.Redirect(url,false);

68voto

Michel Ayres Points 1389

Résolution

Pour contourner ce problème, utilisez l'une des méthodes suivantes:

  • Pour La Réponse.Fin, appelez le HttpContext.Actuel.ApplicationInstance.CompleteRequest() méthode au lieu de Réponse.Fin de contourner l'exécution de code à l' Application_EndRequest événement.

  • Pour La Réponse.Rediriger, l'utilisation d'une surcharge, une Réponse.Redirection(String url, bool endResponse) qui passe à false pour le endResponse paramètre pour supprimer l'appel interne à la Réponse.Fin. Par exemple: Response.Redirect ("nextpage.aspx", false); Si vous utilisez cette solution de contournement, le code qui suit la Réponse.Redirection est exécuté.

  • Pour Le Serveur.Transfert, à l'utilisation du Serveur.Exécuter la méthode à la place.

Les symptômes

Si vous utilisez la Réponse.Fin, La Réponse.Redirection, ou d'un Serveur.Transfert méthode, un ThreadAbortException exception se produit. Vous pouvez utiliser un instruction try-catch pour attraper cette exception.

Cause

La Réponse.Fin de la méthode se termine l'exécution de page et les quarts de les l'exécution de la Application_EndRequest événement dans l'application des événements de pipeline. La ligne de code qui suit Réponse.La fin n'est pas exécutée.

Ce problème se produit dans la Réponse.Rediriger l'utilisateur et le Serveur.Transfert méthodes parce que les deux méthodes de Réponse à un appel.Fin à l'interne.

Statut

Ce comportement est par la conception.

Propriétés

ID d'Article: 312629 - Dernière Révision: août 30, 2012 - Version: 4.0

S'applique à

  • Microsoft ASP.NET 4.5
  • Microsoft ASP.NET 4
  • Microsoft ASP.NET 3.5
  • Microsoft ASP.NET 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0

Mots-clés: kbexcepthandling kbprb KB312629

Source: MODÈLE: ThreadAbortException Se produit Si Vous Utilisez Réponse.Fin, La Réponse.Redirection, ou d'un Serveur.Transfert

14voto

Nick Josevski Points 1997

Dans un bug, j'ai visité, il y avait une Réponse.Redirect() et il était en cours d'exécution dans un endroit inattendu (lire: endroit inapproprié - à l'intérieur d'une propriété de membre méthode de lecture).

Si vous êtes le débogage d'un problème et l'expérience de la "Impossible d'évaluer l'expression..." exception:

  1. Effectuez une recherche pour Response.Redirect() et soit faire le deuxième paramètre endResponse = faux, ou
  2. Désactiver temporairement l' appel de redirection.

C'était frustrant car il semble que pour exécuter l' appel de Redirection avant l'étape "à travers" le débogueur, avait atteint cet endroit.

13voto

Mandeep Janjua Points 896

Veuillez consulter ce lien pour la raison derrière ce problème et de la solution pour l'erreur:

http://support.microsoft.com/kb/312629/EN-US/

Article Du Support Microsoft:

PRB: ThreadAbortException Se produit Si Vous Utilisez Réponse.Fin, La Réponse.Redirection, ou d'un Serveur.Transfert De Imprimer Imprimer E-Mail E-Mail

Pour contourner ce problème, utilisez l'une des méthodes suivantes: Pour Réponse.Fin, appelez le HttpContext.Actuel.ApplicationInstance.CompleteRequest plutôt la méthode de la Réponse.Fin de contourner l'exécution de code à l' Application_EndRequest événement.

Pour La Réponse.Rediriger, l'utilisation d'une surcharge, Réponse.Redirection(String url, bool endResponse) qui passe à false pour le endResponse paramètre pour supprimer l'appel interne à Réponse.Fin.

Par exemple: la Réponse.Redirect ("nextpage.aspx", false);

Si vous utilisez cette solution de contournement, le code qui suit Réponse.Redirection est exécuté. Pour Le Serveur.Le transfert, l'utilisation de la Serveur.Méthode Execute à la place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X