코드가 최적화되었거나 기본 프레임이 호출 스택 위에 있으므로 표현식을 평가할 수 없습니다


143

오류가 발생합니다.

코드가 최적화되었거나 기본 프레임이 호출 스택의 맨 위에 있으므로 표현식을 평가할 수 없습니다.

리피터의 itemcommand 이벤트에서 새 페이지로 리디렉션되었습니다. 라인에서 오류가 발생합니다.

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

누구든지 제발 도와주세요? 거기에 문제가 있습니까? 은 _COMPlusExceptionCode이다 - 532459699.

답변:


162
Request.Redirect(url,false);

false 현재 페이지의 실행을 종료해야하는지 여부를 나타냅니다.


2
Request.Redirect (url, false)와 같은 것이 있습니까?
F11

요청의 어떤 리디렉션 속성이 없습니다
카란

@karan 버전 당신이 잘 요구가 "요청"와 같은 것으로 사용
PrateekSaluja

125

아래와 같이 Response false의 두 번째 인수를 작성하십시오 .

Response.Redirect(url,false);

67

해결

이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.

조짐

Response.End, Response.Redirect 또는 Server.Transfer 메소드를 사용하는 경우 ThreadAbortException 예외가 발생합니다. try-catch 문을 사용하여이 예외를 포착 할 수 있습니다.

원인

Response.End 메소드는 페이지 실행을 종료하고 실행을 애플리케이션의 이벤트 파이프 라인에서 Application_EndRequest 이벤트로 이동합니다. Response.End 다음에 오는 코드 줄은 실행되지 않습니다.

이 문제는 두 메서드가 모두 내부적으로 Response.End를 호출하기 때문에 Response.Redirect 및 Server.Transfer 메서드에서 발생합니다.

상태

이것은 의도적으로 설계된 동작입니다.

속성

기사 ID : 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

키워드 : kbexceptling kbprb KB312629

출처 : PRB : Response.End, Response.Redirect 또는 Server.Transfer를 사용하면 ThreadAbortException이 발생합니다.


14

내가 조사하고있는 버그에는 Response.Redirect ()가 있었고 예상치 않은 위치 에서 실행 중이었습니다 ( 읽기 : 부적절한 위치-멤버 속성 getter 메소드 내부 ).

문제를 디버깅 중이고 " 표현식을 평가할 수 없습니다 ... "예외가 발생하는 경우 :

  1. 검색을 수행 Response.Redirect()하고 두 번째 매개 변수를 endResponse = false로 설정하십시오 . 또는
  2. 재전송 호출을 일시적으로 비활성화합니다 .

디버거의 "스텝 스루"가 해당 위치에 도달하기 전에 리디렉션 호출 을 실행하는 것처럼 보이기 때문에 실망 스러웠습니다.


13

이 문제의 원인과 오류에 대한 해결책은이 링크를 확인하십시오.

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

Microsoft 지원 기사 :

PRB : Response.End, Response.Redirect 또는 Server.Transfer 인쇄 인쇄 전자 메일 전자 메일을 사용하면 ThreadAbortException이 발생한다

이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오. Response.End의 경우 코드 실행을 Application_EndRequest 이벤트로 무시하려면 Response.End 대신 HttpContext.Current.ApplicationInstance.CompleteRequest 메서드를 호출하십시오.

Response.Redirect의 경우 endResponse 매개 변수에 대해 false를 전달하여 Response.End에 대한 내부 호출을 억제하는 과부하 Response.Redirect (String url, bool endResponse)를 사용하십시오.

예를 들면 다음과 같습니다. Response.Redirect ( "nextpage.aspx", false);

이 해결 방법을 사용하면 Response.Redirect 다음에 오는 코드가 실행됩니다. Server.Transfer의 경우 Server.Execute 메서드를 대신 사용하십시오.


3

나는이 같은 문제가 있었고 까다로웠다. 저에게는 Ext.Js 자바 스크립트 라이브러리를 사용하고 있기 때문입니다. Ajax 호출에서 액세스 한 서버 측 코드에서 response.redirect를 수행하는 경우 문제가 있습니다. Ext.js는 Ext.Redirect 방법에 대한 해결 방법이 있습니다.


3

이 코드를 사용하여 문제를 해결하십시오.

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

5
이 코드의 기능에 대한 좀 더 설명하면 좋을 것입니다.
Meryovi


2

다른 사람이 내가 Response.End ()를 사용하여 수행 한 문제에 부딪쳤을 때 비동기 트리거 버튼

<asp:AsyncPostBackTrigger ControlID="btn_login" />

업데이트 패널에서. 나는 정기적 인 게시물로 최고가 아니라 전환했지만 효과가있었습니다.

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

페이지에서만 리디렉션하기 때문에 이것이 실용적인 솔루션이었습니다.


2

업데이트 패널과 링크 버튼을 사용하여 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();

1

이것을 사용하면 항상 나를 위해 일합니다.

Response.Redirect(Request.RawUrl, false);

여기서 Response.Redirect (Request.RawUrl)는 단순히 현재 컨텍스트의 URL로 리디렉션하는 반면 두 번째 매개 변수 "false"는 endResponse를 나타냅니다.


1
Stackoverflow에 오신 것을 환영합니다. 답을 설명하십시오. 왜 문제를 해결합니까? 다른 사람들이 쉽게 이해할 수 있도록하십시오.
octobus

0

이 문제는 유효성 검사 규칙이있는 모델이있는 mvc에 면도기 페이지가있는 경우 발생할 수 있습니다. 양식에서 게시 할 때 일부 필드에 유효성 검사 오류를 표시하지 않으면이 메시지가 나타날 수 있습니다. 추론 : 게시하려는 방법이 다르고 다른 출처에서 사용했거나 원래 요청을 처리 한 방법과 다른 곳에있는 경우 일 수 있습니다.

따라서 다르기 때문에 예외와 모델 상태가 같지 않기 때문에 오류를 표시하거나 처리하기 위해 원본 페이지로 돌아갈 수 없습니다.

발견하기가 약간 어려울 수 있지만 실수하기 쉽습니다. 수신 방법이 실제로 게시 할 수있는 모든 방법을 확인하는지 확인하십시오.

예를 들어 실제로 서버 측 유효성 검사를 통해 유효성 검사에서 허용되는 최대 값보다 큰 문자열을 양식으로 작성하는 것이 불가능하더라도 수신 방법에 게시하는 다른 방법과 소스가있을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.