2009-12-31 3 views
1

내 ASP.Net 페이지에서 문서를 만들고 강제로 다운로드해야합니다 ("파일 다운로드"대화 상자 열기). 대부분의 브라우저에서 정상적으로 작동하지만 IE6 SP1 (Windows 2000)에서 "파일 다운로드"대화 상자가 두 번 열립니다. 이유가 무엇입니까?강제 다운로드시 : IE6 SP1에서 파일 다운로드 대화 상자가 두 번 열립니다.

내 매우 간단한 코드 (C#을) :

protected void bnCreateDocument_Click(object sender, EventArgs e) 
{ 

    string documentText = GetDocumentText(); 


    Response.Clear(); 
    Response.Charset = ""; 
    Response.ContentType = "application/msword"; 

    string filename = "MyDoc.doc"; 
    Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); 

    Response.Write(documentText); 
    Response.End(); 
    Response.Flush(); 
} 
+0

브라우저 (IE6 SP1)의 일부로 설치된 브라우저 추가 기능이 있는데,이 링크를 통해 "저장 ..."대화 상자를 사용할 수 있습니까? – shahkalpesh

+0

멋진 아이디어이지만 아니요. 나는 새로 설치 한 시스템에서 그것을 시도했지만 여전히 발생합니다 ... – Zackie

답변

0

귀하의 코드가 잘 보이지만, 내가 지적 거라고 생각 그것에 대해 이상한 몇 가지가 있습니다.

파일 시스템에서 해당 문자열로 파일을 가져 오는 경우 Response.WriteFile()을 직접 사용하지 않으시겠습니까?

또한 Response.End()은 버퍼링이 켜져 있으면 Flush()을 자동으로 호출하므로 마지막에 Flush()을 호출하면 안됩니다. 끝까지 호출하기 전에해야합니다. End()ThreadAbortedException을 발생시킵니다. 따라서이 모든 것을 부르는 것을 피할 수 있다면 이상적입니다. HttpApplication.CompleteRequest()을 사용할 수 있다면 더 좋은 방법입니다.

Response 객체를 종료 할 때 처리해야 할 매우 까다롭고 애매한 버그가 있습니다. Flush 및 End 호출을 처리 한 후에도 여전히 발생하는 경우 Fiddler에서 진행중인 작업을 검토하고이 코드를 .ashx 핸들러로 이동하여 페이지 수명주기에서 벗어나게하십시오.

+0

응답 해 주셔서 감사합니다! WriteFile을 사용하지 않는 이유는 파일 시스템의 파일을 사용하고 있지 않기 때문에 문서를 즉석에서 작성하기 때문입니다. Response.End()에 대한 매우 유용한 정보입니다. CompleteRequest를 사용하여 어떻게 작동하는지 살펴 보겠습니다. 감사합니다. – Zackie

+0

글쎄, 나는 HttpApplication.CompleteRequest()를 tryed했지만 여전히 같은 역할을한다. 첫 번째와 두 번째 파일 다운로드 대화 상자 사이에 아무 것도 나타나지 않아서 Fiddler도 도움이되지 않았습니다 ... – Zackie

관련 문제