2009-05-16 5 views
5

ASP.NET2.0을 사용하고 있습니다. 일부 입력란과 다운로드 버튼으로 다운로드 양식을 만들었습니다. 다운로드 버튼을 클릭하면 "다운로드 해 주셔서 감사합니다 ..."페이지로 사용자를 리디렉션하고 즉시 저장할 파일을 제공하고 싶습니다."감사합니다"페이지로 리디렉션하고 다운로드 한 파일의 저장 대화 상자를 즉시 ​​제공합니다.

public partial class ThankYouPage : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", 
          "attachment; filename=\"downloadedFile.zip\""); 
     Response.ContentType = "application/x-zip-compressed"; 
     Response.BinaryWrite(this.downloadedFileByteArray); 
     Response.Flush(); 
     Response.End(); 
    } 
} 

물론,이 코드는 어떤 "감사합니다"라는 메시지를 표시 할 수 없습니다 :

은 내가 savefile을 대화 상자를 표시하려면이 다음과 같은 코드가 있습니다. "AfterRender"이벤트 또는 이와 비슷한 페이지가있을 수 있습니까?이 다운로드 코드를 이동하여 페이지에 "감사합니다"라는 메시지를 사용자에게 렌더링 할 수있는 기회를 제공 할 수 있습니까? 결국, 저는 그들에게 진실로 감사하고 있습니다. 그래서 저는 그것을 표현하고 싶습니다.

답변

6

당신은이 경우 IFrame을

<iframe src="DownloadFile.aspx" style="display:none;" /> 

를 사용하여 감사의 페이지에서 다운로드 페이지를 참조 할 수 DownloadFile.aspx은 예로부터 뒤에 코드를 가지고있다.

1

은 감사 페이지의 머리에 META REFRESH 태그를 사용

<META http-equiv="refresh" content="1;URL=http://site.com/path/to/downloadedFile.zip"> 

또는, 당신은 다운로드 URL을 사용하여 현재 위치를 대체하기 위해 신체에 onLoad 기능을 사용할 수 있습니다. 이 경우

<body onLoad="document.location='http://site.com/path/to/downloadedFile.zip'"> 

재 지정은 현재 페이지가 로딩을 완료하고 클라이언트는 자바 스크립트가 활성화 한 경우에만 후 을 시작, 그래서 다운로드 링크와 링크를 포함하는 것을 기억합니다 ("다운로드가되지 않는 경우 몇 초 만에 시작 ... "등).

또한 Phil, 또는 심지어 FRAME 또는 완전한 팝업 (차단 가능, 마음 먹기)으로 제안 된 IFRAME을 사용할 수도 있습니다. 귀하의 마일리지가 다를 수 있습니다.

1

작성한 코드는 실제로 '감사합니다'페이지 (두 번째 리디렉션)로 리디렉션되어야합니다. 콘텐츠 처리를 첨부 파일로 설정했기 때문에이 페이지는 기존 '감사'페이지를 실제로 대체하지 않습니다.

1

"감사의 인사"페이지와 클라이언트가 서버를 두 번 호출해야하는 파일을 제공하려는 경우. 그러면 메시지를 표시하기위한 thankyou.aspx 페이지를 만들 수 있습니다 (파일에 직접 다운로드 링크를 넣을 수도 있음). 메타 태그로 다운로드를 시작하거나 js를 사용하여 다운로드를 시작할 수 있습니다 (심지어 다운로드 페이지에서 동일한 작업 수행).

그런 다음 파일을 제공하려면 서버에서 다른 페이지가 실행되지 않도록 직접 링크를 만들어야합니다. 그렇지 않으면 파일 시스템을 숨기기 위해 HttpHandler를 생성해야합니다.

파일

Response.TrasmitFile