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

오류가 발생합니다.

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

리피터의 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);


답변

해결

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

조짐

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이 발생합니다.


답변

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

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

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

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


답변

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

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 메서드를 대신 사용하십시오.


답변

나는이 같은 문제가 있었고 까다로웠다. 저에게는 Ext.Js 자바 스크립트 라이브러리를 사용하고 있기 때문입니다. 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();
}