无法计算表达式,因为代码已优化或本机帧位于调用堆栈之上

Rad*_*dhi 142 asp.net response.redirect .net-3.5

我收到错误:

无法计算表达式,因为代码已优化或本机帧位于调用堆栈之上.

我已重定向到repeater的itemcommand事件中的新页面.错误发生在该行:

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

有人可以帮帮我吗?那有什么不对吗?的_COMPlusExceptionCode是- 532459699.

Pra*_*uja 162

Request.Redirect(url,false);
Run Code Online (Sandbox Code Playgroud)

false 指示当前页面的执行是否应该终止.

  • 有什么像Request.Redirect(url,false)? (2认同)

Rad*_*dhi 125

将第二个参数设为Response false,如下所示.

Response.Redirect(url,false);
Run Code Online (Sandbox Code Playgroud)


Mic*_*res 66

解析度

若要解决此问题,请使用下列方法之一:

症状

如果使用Response.End,Response.Redirect或Server.Transfer方法,则会发生ThreadAbortException异常.您可以使用try-catch语句来捕获此异常.

原因

Response.End方法结束页面执行并将执行转移到应用程序的事件管道中的Application_EndRequest事件.不执行Response.End之后的代码行.

Response.Redirect和Server.Transfer方法中会出现此问题,因为两个方法都在内部调用Response.End.

状态

此行为是设计使然.

属性

文章编号:312629 - 最后修改:2012年8月30日 - 修订版:4.0

适用于

  • 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

关键词: kbexcepthandling kbprb KB312629

源: PRB:如果您使用Response.End,Response.Redirect或Server.Transfer发生ThreadAbortException


Nic*_*ski 14

在我正在调查的一个错误中,有一个Response.Redirect()并且它在一个意外的位置执行(读取:不适当的位置 - 在成员属性getter方法内).

如果您正在调试问题并遇到" 无法评估表达式... "异常:

  1. 执行搜索Response.Redirect()并生成第二个参数endResponse = false,或
  2. 暂时禁用重定向呼叫.

这很令人沮丧,因为它似乎在调试器的"逐步执行"到达该位置之前执行Redirect调用.


Man*_*jua 13

请查看此链接以了解此问题背后的原因以及错误的解决方案:

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

Microsoft支持文章:

PRB:如果您使用Response.End,Response.Redirect或Server.Transfer打印打印电子邮件电子邮件发生ThreadAbortException

若要解决此问题,请使用下列方法之一:对于Response.End,请调用HttpContext.Current.ApplicationInstance.CompleteRequest方法而不是Response.End以绕过代码执行到Application_EndRequest事件.

对于Response.Redirect,使用一个重载,Response.Redirect(String url,bool endResponse),它为endResponse参数传递false以禁止对Response.End的内部调用.

例如:Response.Redirect("nextpage.aspx",false);

如果使用此变通方法,则执行Response.Redirect之后的代码.对于Server.Transfer,请改用Server.Execute方法.