2011-02-07 6 views
6

내 응용 프로그램에서 일부 내 보낸 데이터베이스 정보를 다운로드 할 사용자를위한 zip 파일을 작성 중입니다. zip 파일은 사용자가 "데이터 생성"버튼을 클릭하고 데이터베이스에 요청을 기록 할 때 만들어집니다.포스트 백 이후에 파일 다운로드 시작

내 페이지에는 사용자의 다운로드 내역을 보여주는 Gridview가 있고 일정 기간 동안 최신 생성 파일을 다운로드 할 수있는 기능도 있습니다.

내가 겪고있는 문제는 버튼을 클릭 할 때 페이지를 새로 고침하여 (그리드뷰보기를 새로 고침하고 최신 요청을 표시하고 싶습니다.) 파일 다운로드를 시작하는 것입니다. 메시지를 열거 나 저장하거나 취소할지 여부를 결정하도록합니다.

포스트 백에서 다운로드를 시작할 수 있지만 시작하기 전에 GridView가 업데이트되지 않아서 목록에 최신 요청이 표시되지 않습니다. 다운로드 프롬프트가 시작되기 전에 어떻게 gridview를 업데이트 할 수 있습니까?

나는 다운로드를 시작하려면 다음을 사용하고 있습니다 :

public void BeginDownload() 
    { 
     FileDownload download = InventoryService.GetLastThreeFileDownloads(this.EmployeeId).First(); 
     FileInfo fi = new FileInfo(Server.MapPath(SERVER_DOWNLOAD_PATH) + download.DownloadFileName); 

     Response.Clear(); 
     Response.ContentType = "application/zip"; 
     Response.AppendHeader("Content-Disposition", "attachment; filename=" + fi.Name); 
     Response.TransmitFile(fi.FullName); 
     Response.Flush(); 
    } 

숨겨진 필드가 클릭하면 내가 설정하는 (true로 설정되어있는 경우 방법은, 마지막 항목으로 Page_Load 이벤트에서 호출 파일을 작성하는 버튼).

jQuery/AJAX 호출을 통해 페이지를 새로 고치고 다운로드를 거의 시작하지 않아도 호출을 시도했습니다. 모달 대화 상자를 열고 다운로드를 시작하고 모달을 닫을 때 페이지를 새로 고침하는 링크를 클릭하게하는 방법에 대해 생각해 보았습니다.하지만 다른 해결책을 찾을 수없는 경우 최후의 수단입니다.

도움을 주시면 대단히 감사하겠습니다.

답변

2

사용자가 페이지를 다시 보내지 않으면 사용자가 해당 버튼을 클릭하면 HTTP 요청이 전송됩니다. 다운로드 할 파일이 포함 된 HTTP 응답을 생성합니다. 페이지를 새로 고치려면 해당 파일을 보내야합니다. nloaded, 당신은 정상적인 포스트 백 결과 (BeginDownload 메서드를 호출하지 않음)를 보내야하고, 어떻게 든 그가 다른 요청을 할 것을 강요합니다.

다양한 옵션이 여기에 있습니다 : 당신이 말한대로

  • 은 링크를 클릭 iframe이
  • 를 사용 온로드 자바 스크립트
  • 를 사용하여 ... 또는 사용자가 페이지
  • meta refresh 태그를 포함 .

모든 방법은 자신의 단점 (특히 어떤 상황에서, 성가신 수 있습니다, IE의 "원치 않는 다운로드"보호에주의), 최소한 다운로드가되지 않는 경우 "로 다운로드 링크를 포함 아마해야해야 자동 시작, 여기를 클릭하십시오. ")

+0

나는 gridview에 다운로드 링크를 만들었습니다. 그래서 독자적으로 시작하지 않거나 실수로 취소 할 경우 서버에 저장되므로 파일을 다운로드 할 수 있습니다. 제안을 주셔서 감사합니다. 나는 확실히 그것들을 들여다 볼 것이며, 어떤 것이 가장 잘 작동하는지 볼 것입니다. – Delebrin

1

너무 많은 일을 한 것처럼 보입니다. 다시 그리드 뷰를 업데이트하기 위해 게시 한 다음 새 전용 페이지 (또는 ashx 핸들러)로 리디렉션하여 파일을 다운로드하는 것이 좋습니다. 다운로드 페이지/ashx 처리기에서 content-disposition 헤더를 사용하면 gridview 페이지가 계속 표시됩니다.

+0

동의합니다. 제안을 주셔서 감사합니다. 내가 할 수있는 모든 것을 보여줄 것이고, 무엇이든지 최선을 다해 해결책을 찾을 수있을 것입니다! – Delebrin

3

는 여기에 비슷한 언젠가 전에 짓을하는 방법은 다음과 같습니다 포스트 백에

  1. (데이터를 생성)에있는 gridview에서 최신 데이터로 업데이트 된 페이지를 다시 보냅니다. 페이지 완료 로딩하는 생성 된 파일 (window.location='fileurl'; 같은 것을 요청할 때
  2. 은 실행하는 작은 자바 스크립트 함수를 추가합니다. 물론에만 게시에 자바 스크립트 함수를 보냅니다.

표시된 페이지의 내용하지 않는 파일을 요청할 때 변경하면 브라우저의 저장 대화 상자가 팝업으로 표시됩니다.

+0

이전에 타이머로 자바 스크립트 접근 방식을 살펴 봤지만 필요한 경우에만 직접 함수를 전송하려하지 않았습니다. 나는이 옵션을 점검 할 것이다. 제안 해 주셔서 감사합니다! – Delebrin

관련 문제