2012-05-25 7 views
0
이 질문에 관련

: Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack웹 페이지에 ... 식을 계산할 수 없습니다

나는 현재 내 예외에이 메시지가 표시되는 :

{코드가 최적화되어 있기 때문에 식을 계산할 수 없습니다 또는 기본 프레임이 호출 스택 맨 위에 있습니다.}

다음은 잘못된 코드입니다. 예외는 response.End()에서 발생합니다.

이 코드는 웹 페이지의 "excel to excel"버튼에 사용됩니다. 이것은 올바르게 작동하는 동일한 기능을 사용하는 다른 페이지에서 직접 복사됩니다.

이 문제를 디버깅하는 방법에 대한 아이디어가 있으십니까? 예외를 볼 수있는 지점에 어떻게 도달 할 수 있습니까? 또한, 여기에 관련된 질문이 어떻게 적용됩니까? 최상위 대답과 선택한 대답은 매우 모호합니다.

table의 데이터는 세션 상태에 저장됩니다. 사전에

감사합니다.

+0

'using' 블록 외부에서'Response.End()'를 움직여보십시오. – mellamokb

+0

@mellamokb 주사위가 없습니다. : –

+0

처음에 Response.End()를 호출하는 이유 – mellamokb

답변

2

코드는 정상입니다. 하지만

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

어떤 사람들은으로 Response.End를 (고려) 너무 과감한 : 당신으로 Response.End()를 수행 할 때 당신은 ThreadAbortException이 얻을

Is Response.End() considered harmful?

내가이 특정 예외를 처리 제안 (당신이 그것을 얻으려는 것을 알고 있기 때문에), 그리고 응답을 이동하십시오. 끝() (mellamokb 제안처럼) :

 HttpResponse response = HttpContext.Current.Response; 
     try 
     { 
      DataSet dataSet = new DataSet(); 
      DataTable table = new DataTable(); 

      dataSet.Tables.Add(table); 

      response.Clear(); 
      response.Charset = ""; 

      response.ContentType = "application/vnd.ms-excel"; 
      response.AddHeader("Content-Disposition", "attachment;filename=\"ExcelFile.xls\""); 

      using (StringWriter stringWriter = new StringWriter()) 
      using (HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter)) 
      { 
       DataGrid dataGrid = new DataGrid { DataSource = dataSet.Tables[0] }; 

       dataGrid.DataBind(); 
       dataGrid.RenderControl(htmlTextWriter); 

       response.Write(stringWriter.ToString()); 

      } 
      response.End(); 
     } 
     catch (ThreadAbortException ex) 
     { 
      //Log some trace info here 
     } 
+0

Response.End() 대신 HttpContext.Current.ApplicationInstance.CompleteRequest() 을 사용해야하고 Response.Redirect 대신에 Response.Redirect ("Error.aspx", false), 을 사용하고 Server.Transfer 대신 Server.Execute 메서드를 사용합니다 – Jig12

3

예외가 발생하지 않고 해결 될 수 있습니다. 대신

Response.End()

페이지의 실행을 중지하지 않는

Response.Flush()

기능을 사용하십시오.

나는 또한 내가 페이지의 Reponse를 사용하여 .XLSX 파일을 다운로드 시도했습니다 때 약간의 문제가 있었다했습니다

: 나는 다음과 같은 오류 텍스트를 가지고 엑셀 파일을 연 후

Excel에서 myFilename.xlsx에 읽을 수없는 콘텐츠가 있습니다. 이 통합 문서의 내용을 복구 하시겠습니까? 이 책의 출처를 신뢰하는 경우 예를 클릭하십시오.

Response.Flush() 다음에 Response.SuppressContent = true;을 추가하여이를 해결했습니다.

0

HttpContext.Current를 사용하십시오.Response.End() 대신 ApplicationInstance.CompleteRequest()

관련 문제