2012-04-02 5 views
2

아래 코드를 사용하여 Excel 파일을 다운로드하고 있습니다. Response.End() 호출이 실행되면 창을 닫으려고합니다. 그러나 이것은 일어나지 않습니다. 지금까지 가지고있는 코드를 확인하십시오.Response.End() 뒤에 창을 닫으시겠습니까?

'Write it back to the client 

    Dim filename As String = "FullExtract_" & Now.Year.ToString & Now.Month.ToString & Now.Day.ToString & ".xlsx" 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 
    Response.AddHeader("content-disposition", "attachment; filename=" & filename) 
    Response.BinaryWrite(pck.GetAsByteArray()) 
    Response.End() 
    'cursor not reaching to below code 
    Page.ClientScript.RegisterStartupScript(Me.GetType(), "closedownload", "JavaScript:window.close(); return false;") 

어떻게 창을 닫을 수 있습니까?

+0

'Response.End'를 호출하면 페이지 실행이 중단되므로 페이지를 더 이상 처리하지 못합니다. 이것을보십시오 : http://msdn.microsoft.com/en-us/library/system.web.httpresponse.end.aspx. –

+0

창을 닫기위한 제안. – James123

답변

0

Response.End를 호출하지 마십시오. ThreadAbortException가 throw되어 모든 종류의 불쾌한 일이 발생합니다. 또한이 예외는 Response.End가 실행되지 않은 후에 Page.ClientScript를 방해하는 것입니다. 그럼 그냥 Response.End를 제거하십시오. 더 이상 필요하지 않으며 오래 된 고전적인 ASP 시대를 고수했습니다.

편집 : 이렇게 창을 닫을 수 없습니다. 다운로드를 위해 파일을 보내면 사용자 OS에 파일 저장 프롬프트가 열리고 파일이 다운로드됩니다. html RegisterStartupScript는 내가 생각할 수있는 파일 다운로드의 일부로 끝날 것입니다. 다운로드를 트리거하는 버튼 또는 링크가 target = "_ blank"또는 javascript를 사용하여 새 창을 열면 해당 창이 자동으로 닫히거나 브라우저에 따라 열리지 않을 것입니다.

+0

'Response.End()'를 제거했고 컨트롤은'Page.ClientScript '로갑니다.RegisterStartupScript '하지만 창이 닫히지 않습니다. 그 코드가 작동하지 않는 것을 보아라. – James123

0

Response.End()을 호출하면 페이지 실행이 중단되므로 스크립트를 등록하는 줄은 처리되지 않습니다. 그러나 올바르게 파일을 받기 위해서는 파일 내용을 브라우저로 보낸 후에 Response.End()을 호출해야한다고 생각합니다.

창이 닫히지 만 파일을 다운로드 할 수있게하려면 팝업 스크립트를 사용하여 팝업 창을 표시하고 닫은 다음 부모 페이지를 열어보십시오.

0

, 나는 당신의 윈도우 닫기 스크립트이 ↓ 같아야 먼저 생각 :

여기에 비슷한 문제의 해결을위한 몇 가지 제안이 있습니다

Page.ClientScript.RegisterStartupScript(this.GetType(), "closedownload", "<script language='javascript'>window.opener=null;window.close();</script>"); 
> 제어 이벤트 -

그럼, 난 당신을 Response.End()는 위 문서에서 ASP.NET LIFE CYCLE

에 대해 닫지 창입니다 수 있습니다 후 왜, 우리는 순서

페이지로드를 배울 수 있다고 생각 - > 페이지 렌더링.

1 귀하가 등록한 자바 스크립트는 귀하의 페이지가 렌더링되었을 때 발휘됩니다.

2, 이벤트에서 페이지 수명주기 실행을 절대적으로 중지하는 Response.End()를 실행하면 페이지 렌더링 이벤트가 실행되지 않습니다.

3 그래서 Response.End() 이후에 창을 닫을 수 없습니다. IMHO

관련 문제