Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack

asp.net.Net 3.5response.redirect

asp.net Problem Overview


I am getting the error:

>Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.

I have redirected to a new page in repeater's itemcommand event. The error occurs at the line:

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

Can anybody please help me? Is anything wrong there? The _COMPlusExceptionCode is -532459699.

asp.net Solutions


Solution 1 - asp.net

Request.Redirect(url,false);

false indicates whether execution of current page should terminate.

Solution 2 - asp.net

Make second argument of Response false as shown below.

Response.Redirect(url,false);

Solution 3 - asp.net

Resolution

> To work around this problem, use one of the following methods: >
> - For Response.End, call the HttpContext.Current.ApplicationInstance.CompleteRequest() > method instead of Response.End to bypass the code execution to the > Application_EndRequest event. > > - For Response.Redirect, use an overload, Response.Redirect(String url, bool endResponse) that passes false for the endResponse parameter to suppress the internal call to Response.End. For example: Response.Redirect > ("nextpage.aspx", false); If you use this workaround, the code > that follows Response.Redirect is executed. > > - For Server.Transfer, use the Server.Execute method instead.

Symptoms

> If you use the Response.End, Response.Redirect, or Server.Transfer > method, a ThreadAbortException exception occurs. You can use a > try-catch statement to catch this exception.

Cause

> The Response.End method ends the page execution and shifts the > execution to the Application_EndRequest event in the application's > event pipeline. The line of code that follows Response.End is not > executed. > > This problem occurs in the Response.Redirect and Server.Transfer > methods because both methods call Response.End internally.

Status

> This behavior is by design.

Properties

> Article ID: 312629 - Last Review: August 30, 2012 - Revision: 4.0 > > Applies to > > - 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 > > Keywords: kbexcepthandling kbprb KB312629

Source: PRB: ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer

Solution 4 - asp.net

In a bug I was investigating there was a Response.Redirect() and it was executing in an unexpected location (read: inappropriate location - inside a member property getter method).

If you're debugging a problem and experience the "Unable to evaluate expression..." exception:

  1. Perform a search for Response.Redirect() and either make the second parameter endResponse = false, or
  2. Temporarily disable the redirect call.

This was frustrating as it would appear to execute the Redirect call before the "step through" on the debugger had reached that location.

Solution 5 - asp.net

Please check this link for the reason behind this issue and solution for the error:

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

Microsoft Support Article:

PRB: ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer Print Print Email Email

> To work around this problem, use one of the following methods: For > Response.End, call the > HttpContext.Current.ApplicationInstance.CompleteRequest method instead > of Response.End to bypass the code execution to the > Application_EndRequest event. > >For Response.Redirect, use an overload, > Response.Redirect(String url, bool endResponse) > that passes false for > the endResponse parameter to suppress the internal call to > Response.End. > >For example: Response.Redirect ("nextpage.aspx", > false); > > If you use this workaround, the code that follows Response.Redirect is executed. For Server.Transfer, use the > Server.Execute method instead.

Solution 6 - asp.net

I had this same problem too, and it was tricky. For me, it was because I'm using Ext.Js javascript library. If you are doing a response.redirect in server-side code that you accessed in an Ajax call, there are problems. Ext.js has a workaround with their Ext.Redirect method.

Solution 7 - asp.net

Also You Can Use Server.Execute

Solution 8 - asp.net

use this code solve the problem:

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();
}

Solution 9 - asp.net

Just encase someone else ran into the issues I did I was using Response.End() an async trigger button

<asp:AsyncPostBackTrigger ControlID="btn_login" />

in an update panel. I switched to regular post back not the best but it worked.

<asp:PostBackTrigger ControlID="btn_login" />. 

Since I was only redirecting on the page this was a viable solution.

Solution 10 - asp.net

If you are using Update Panel and link button to download excel is inside the panel than add postback trigger

<asp:PostBackTrigger ControlID="lnkTemplate" /> 

and in Code behind inside click event

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();

Solution 11 - asp.net

Use this, works for me always.

Response.Redirect(Request.RawUrl, false);

Here, Response.Redirect(Request.RawUrl) simply redirects to the url of the current context, while the second parameter "false" indicates to either endResponse or not.

Solution 12 - asp.net

This problem may be a result when you have a razor page in mvc with a model that has some validation rules. When you post from a form and you forget to display validation errors on some field, then this message might come up. Speculation: this could be if the method you are posting to is different and used by other sources or resides in a different place than the method serving the original request.

So because it's different, it can't return to the original page to display or handle the errors because the excecution and model state is not the same (something like that).

It can be slightly difficult to discover, but easy mistake to do. Make sure your recieving method actually validates all possible ways to post to it.

for instance, even if you have serverside validation that actually makes it impossible to write in the form a string that is bigger than the max allowed by your validation, there could be other ways and sources that post to the recieving method.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRadhiView Question on Stackoverflow
Solution 1 - asp.netPrateekSalujaView Answer on Stackoverflow
Solution 2 - asp.netRadhiView Answer on Stackoverflow
Solution 3 - asp.netMichel AyresView Answer on Stackoverflow
Solution 4 - asp.netNick JosevskiView Answer on Stackoverflow
Solution 5 - asp.netMandeep JanjuaView Answer on Stackoverflow
Solution 6 - asp.netscottView Answer on Stackoverflow
Solution 7 - asp.netsambit.albusView Answer on Stackoverflow
Solution 8 - asp.netswathiView Answer on Stackoverflow
Solution 9 - asp.netvikingbenView Answer on Stackoverflow
Solution 10 - asp.netMudassir HasanView Answer on Stackoverflow
Solution 11 - asp.netChidi-NwanetoView Answer on Stackoverflow
Solution 12 - asp.netJohan HerstadView Answer on Stackoverflow