无法评估expression式,因为代码已经过优化,或者本地框架位于调用堆栈之上
我收到错误:
无法评估expression式,因为代码已经过优化,或者本地框架位于调用堆栈之上。
我已经redirect到中继器的itemcommand事件中的新页面。 该行发生错误:
string url = "~/Galleries/AlbumImageList.aspx?UId=" + this.UserId.ToString() + "&AlbumId=" + e.CommandArgument.ToString(); Response.Redirect(url);
任何人都可以帮我吗? 有什么不对吗? _COMPlusExceptionCode
是 – 532459699
。
Request.Redirect(url,false);
false
表示当前页面的执行是否应该终止。
使Response
第二个参数为false ,如下所示。
Response.Redirect(url,false);
parsing度
要解决此问题,请使用下列方法之一:
对于Response.End ,请调用HttpContext.Current.ApplicationInstance.CompleteRequest()方法而不是Response.End以绕过执行到Application_EndRequest事件的代码。
对于Response.Redirect ,使用重载, Response.Redirect(String url,bool endResponse)为endResponseparameter passingfalse以禁止对Response.End的内部调用。 例如:
Response.Redirect ("nextpage.aspx", false);
如果您使用此解决方法,则执行Response.Redirect后面的代码。对于Server.Transfer ,请改用Server.Execute方法。
症状
如果使用Response.End,Response.Redirect或Server.Transfer方法,则会发生ThreadAbortExceptionexception。 您可以使用try-catch语句来捕获此exception。
原因
Response.End方法结束页面执行并将执行转移到应用程序事件pipe道中的Application_EndRequest事件。 在Response.End之后的代码行不被执行。
在Response.Redirect和Server.Transfer方法中发生此问题,因为这两个方法在内部调用Response.End。
状态
此行为是devise使然。
属性
文章编号:312629 – 最后修改:2012年8月30日 – 修订:4.0
适用于
- 微软ASP.NET 4.5
- 微软ASP.NET 4
- 微软ASP.NET 3.5
- 微软ASP.NET 2.0
- 微软ASP.NET 1.1
- 微软ASP.NET 1.0
关键字: kbexcepthandling kbprb KB312629
来源: PRB:如果您使用Response.End,Response.Redirect或Server.Transfer发生ThreadAbortException
在一个我正在调查的问题中,有一个Response.Redirect(),它在一个意外的位置执行( 读取:不适当的位置 – 在成员属性getter方法内 )。
如果您正在debugging问题并体验“ 无法评估expression式… ”exception:
- 执行
Response.Redirect()
的search,并使第二个参数endResponse = false ,或 - 暂时禁用redirect呼叫 。
这是令人沮丧的,因为在debugging器的“step through”到达那个位置之前,似乎要执行redirect呼叫 。
请检查这个链接的原因背后的原因和解决scheme的错误:
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)为endResponseparameter passingfalse以禁止对Response.End的内部调用。
例如:Response.Redirect(“nextpage.aspx”,false);
如果您使用此解决方法,则执行Response.Redirect后面的代码。 对于Server.Transfer,请改用Server.Execute方法。
我也有同样的问题,这是棘手的。 对我来说,这是因为我使用Ext.Js JavaScript库。 如果您在通过Ajax调用访问的服务器端代码中执行response.redirect,则会出现问题。 Ext.js与他们的Ext.Redirect方法有一个解决方法。
使用这个代码解决问题:
string path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "Uploadfile\\" + fileName; System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read); byte[] bt = new byte[fs.Length]; fs.Read(bt, 0, (int)fs.Length); fs.Close(); Response.ContentType = "application/x-unknown/octet-stream"; Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + fileName;+ "\""); try { if (bt != null) { System.IO.MemoryStream stream1 = new System.IO.MemoryStream(bt, true); stream1.Write(bt, 0, bt.Length); Response.BinaryWrite(bt); //Response.OutputStream.Write(bt, 0, (int)stream1.Length); Response.Flush(); // Response.End(); } } catch (Exception ex) { Response.Write(ex.Message); throw ex; } finally { Response.End(); }
你也可以使用Server.Execute
只是包装别人遇到了我使用Response.End()asynchronous触发button的问题
<asp:AsyncPostBackTrigger ControlID="btn_login" />
在更新面板中。 我切换到正常回发不是最好的,但它的工作。
<asp:PostBackTrigger ControlID="btn_login" />.
由于我只是在页面上redirect,所以这是一个可行的解决scheme。
如果你正在使用更新面板和链接button来下载excel是在面板内添加回发触发器
<asp:PostBackTrigger ControlID="lnkTemplate" />
并在代码后面点击事件
string ServerPath = System.Configuration.ConfigurationManager.AppSettings["FilePath"] + "Template.xlsx"; System.IO.FileInfo file = new System.IO.FileInfo(Server.MapPath(ServerPath)); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString()); HttpContext.Current.Response.ContentType = "application/octet-stream"; HttpContext.Current.Response.TransmitFile(file.FullName); HttpContext.Current.Response.Flush(); HttpContext.Current.ApplicationInstance.CompleteRequest();