Невозможно оценить выражение, потому что код оптимизирован или собственный кадр находится поверх стека вызовов

Я получаю сообщение об ошибке:

Невозможно оценить выражение, потому что код оптимизирован или собственный кадр находится поверх стека вызовов.

Я перенаправил новую страницу в событие элемента управления ретранслятора. Ошибка возникает на линии:

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

Может ли кто-нибудь помочь мне? Там что-то не так? _COMPlusExceptionCode - 532459699.

Ответ 1

Сделайте второй аргумент Response false, как показано ниже.

Response.Redirect(url,false);

Ответ 2

Request.Redirect(url,false);

false указывает, следует ли прекратить выполнение текущей страницы.

Ответ 3

Решение

Чтобы обойти эту проблему, используйте один из следующих способов:

  • Для Response.End вызовите HttpContext.Current.ApplicationInstance.CompleteRequest()вместо Response.End, чтобы обойти выполнение кода на Событие Application_EndRequest.

  • Для Response.Redirect используйте перегрузку, Response.Redirect(String url, bool endResponse), который передает false для параметра endResponse, чтобы отключить внутренний вызов Response.End. Например: Response.Redirect ("nextpage.aspx", false); Если вы используете этот обходной путь, код который следует за Response.Redirect.

  • Для Server.Transfer используйте Server.Execute.

Симптомы

Если вы используете Response.End, Response.Redirect или Server.Transfer метод, возникает исключение ThreadAbortException. Вы можете использовать try-catch, чтобы поймать это исключение.

Причина

Метод Response.End завершает выполнение страницы и сдвигает выполнение события Application_EndRequest в приложении конвейер событий. Строка кода, которая следует за Response.End, не является выполняется.

Эта проблема возникает в Response.Redirect и Server.Transfer потому что оба метода вызывают Response.End внутри.

Состояние

Это поведение по дизайну.

Свойства

Код статьи: 312629 - Последнее изменение:: 30 августа 2012 г. - Редакция: 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: ThreadAbortException возникает, если вы используете Response.End, Response.Redirect или Server.Transfer

Ответ 4

В ошибке, которую я изучал, был Response.Redirect(), и он выполнялся в неожиданном месте (читайте: неприемлемое местоположение - внутри метода getter-элемента).

Если вы отлаживаете проблему и испытываете исключение "Невозможно оценить выражение...":

  • Выполните поиск Response.Redirect() и сделайте второй параметр endResponse = false или
  • Временно отключить вызов перенаправления.

Это было неприятно, поскольку, казалось бы, он выполнял вызов Redirect до того, как "шаг за шагом" в отладчике достиг этого местоположения.

Ответ 5

Пожалуйста, проверьте эту ссылку по причине этой проблемы и решения для ошибки:

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

Статья поддержки Microsoft:

PRB: ThreadAbortException возникает, если вы используете Response.End, Response.Redirect или Server.Transfer Печать Печать Email Email

Чтобы обойти эту проблему, используйте один из следующих способов: Ответ. И вызовите Вместо этого применяется метод HttpContext.Current.ApplicationInstance.CompleteRequest ответа. И чтобы обойти выполнение кода на Событие Application_EndRequest.

Для Response.Redirect используйте перегрузку, Response.Redirect(String url, bool endResponse) который передает false для параметр endResponse для подавления внутреннего вызова Response.End.

Например: Response.Redirect( "nextpage.aspx", ложь);

Если вы используете это обходное решение, выполняется код, следующий за Response.Redirect. Для Server.Transfer используйте Server.Execute.

Ответ 6

У меня тоже была эта проблема, и это было сложно. Для меня это было потому, что я использую javascript-библиотеку Ext.Js. Если вы выполняете response.redirect в серверном коде, к которому вы обращались в вызове Ajax, возникают проблемы. Ext.js имеет обходное решение с их методом Ext.Redirect.

Ответ 7

Также вы можете использовать Server.Execute

Ответ 8

используйте этот код для решения проблемы:

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

Ответ 9

Просто включите кого-то другого в проблемы, которые я использовал. Я использовал Response.End() кнопку запуска async

<asp:AsyncPostBackTrigger ControlID="btn_login" />

на панели обновления. Я переключился на обычный пост назад, но не самый лучший, но он сработал.

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

Поскольку я только перенаправлял на страницу, это было жизнеспособное решение.

Ответ 10

Если вы используете панель обновления и ссылку для загрузки 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();