Ответ 1
Сделайте второй аргумент Response
false, как показано ниже.
Response.Redirect(url,false);
Я получаю сообщение об ошибке:
Невозможно оценить выражение, потому что код оптимизирован или собственный кадр находится поверх стека вызовов.
Я перенаправил новую страницу в событие элемента управления ретранслятора. Ошибка возникает на линии:
string url = "~/Galleries/AlbumImageList.aspx?UId=" + this.UserId.ToString() + "&AlbumId=" + e.CommandArgument.ToString();
Response.Redirect(url);
Может ли кто-нибудь помочь мне? Там что-то не так?
_COMPlusExceptionCode
- 532459699
.
Сделайте второй аргумент Response
false, как показано ниже.
Response.Redirect(url,false);
Request.Redirect(url,false);
false
указывает, следует ли прекратить выполнение текущей страницы.
Чтобы обойти эту проблему, используйте один из следующих способов:
Для 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
В ошибке, которую я изучал, был Response.Redirect(), и он выполнялся в неожиданном месте (читайте: неприемлемое местоположение - внутри метода getter-элемента).
Если вы отлаживаете проблему и испытываете исключение "Невозможно оценить выражение...":
Response.Redirect()
и сделайте второй параметр endResponse = false илиЭто было неприятно, поскольку, казалось бы, он выполнял вызов Redirect до того, как "шаг за шагом" в отладчике достиг этого местоположения.
Пожалуйста, проверьте эту ссылку по причине этой проблемы и решения для ошибки:
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.
У меня тоже была эта проблема, и это было сложно. Для меня это было потому, что я использую javascript-библиотеку Ext.Js. Если вы выполняете response.redirect в серверном коде, к которому вы обращались в вызове Ajax, возникают проблемы. Ext.js имеет обходное решение с их методом Ext.Redirect.
Также вы можете использовать Server.Execute
используйте этот код для решения проблемы:
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();
}
Просто включите кого-то другого в проблемы, которые я использовал. Я использовал Response.End() кнопку запуска async
<asp:AsyncPostBackTrigger ControlID="btn_login" />
на панели обновления. Я переключился на обычный пост назад, но не самый лучший, но он сработал.
<asp:PostBackTrigger ControlID="btn_login" />.
Поскольку я только перенаправлял на страницу, это было жизнеспособное решение.
Если вы используете панель обновления и ссылку для загрузки 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();