2010-07-28 1 views
0

ASP.NET 페이지가 있습니다. ASP.NET AJAX 및 Telerik을 사용합니다. RAD 구성 요소)를 사용하여 데이터 테이블과 CSV 형식으로 데이터를 다운로드하는 옵션을 제공합니다.서버 쪽 작업을 수행하고 다운로드 할 파일을 반환하며 UpdateProgress를 통해 원활하게 재생되는 ASP.NET 버튼 ... 단일 요청으로

하나의 버튼으로 사용자가 데이터 세트를 다운로드 할 수 있어야한다는 요구 사항이 있습니다. 나는 그 거의 기반으로 나를 위해 Response.Redirect to new window

내 ASPX에서 솔루션을 일하고 설정 시스템을 가지고는 다음과 같습니다

<asp:Button ID="ExportCsvButton" runat="server" Text="Download to CSV/Excel" 
    OnClick="ExportCsvButton_Clicked" OnClientClick="aspnetForm.target = '_blank';" /> 

그런 다음 ExportCsvButton_Clicked 내 코드 숨김에서, 나는 같은 것을 할 :

byte[] csvBytes = someLongOperation(); 
Session[EXPORTED_SESSION_KEY] = csvBytes; 
Response.Redirect("myexportpage.aspx", true); 

마지막으로, 내 'myexportpage'코드 숨김에서, 나는이 일을 해요 :

protected void Page_Load(object sender, EventArgs e) 
{    
    Response.Clear(); 
    Response.ClearHeaders(); 
    Response.ClearContent(); 

    Response.AppendHeader("content-disposition", "attachment; filename=" + "file.csv"); 
    Response.ContentType = "text/csv"; 
    Response.AddHeader("Pragma", "public"); 

    Response.BinaryWrite(Session[OtherPage.EXPORTED_SESSION_KEY] as byte[]); 
    Response.Flush(); 
    Response.End(); 
} 

이것은 실제로 아주 잘 작동합니다. 'CSV로 내보내기'버튼을 클릭하면 페이지의 UpdateProgress가 실행되고로드하는 오버레이가 표시됩니다 (보이는 경우 해당 창을 덮는 CSS div입니다). 데이터 세트에 따라 (잠재적으로 몇 분) 시간이 걸릴 수 있습니다.이 시점에서 파일 팝업 창이 나타납니다. 내 브라우저에서 파일을 저장하거나 열 수 있으며 파일을 저장할 때 내 내보내기 버튼을 사용하여 페이지에서 계속할 수 있습니다. 시원한.

내 유일한 문제는 UpdateProgress가 절대로 없어지지 않는다는 것입니다. 즉, 미니 내보내기 페이지로 응답을 리디렉션하고 있기 때문에 포스트 백이 완료되지 않고 포스트 백 요청에 대한 전용 응답이 없기 때문입니다.

필요한 경우 웹 앱의 나머지 부분에서는이 기능이 필요하지 않으므로 매우 취약한 솔루션을 사용할 수 있습니다.

나는 AJAX에서 아주 초록색이어서 이미 사용할 수있는 우아한 해결책이 없다면 놀라지 않을 것입니다. 제가 정말로 피하고 싶은 것은 사용자가 다운로드를 시작하라는 두 번째 요청을 시작하도록 강요합니다 (파일 다운로드 사이트에 표시 = "다운로드가 다음 5 초 내에 시작되지 않으므로 여기를 클릭하십시오").

의견이 있으십니까?

답변

0

필자는 생각하지 않습니다. 파일 다운로드와 UpdateProgress의 결과에는 두 가지 별도 응답이 필요합니다.

내 솔루션에는 2 번의 클릭이 필요하지만 페이지 전환은 필요하지 않습니다.

내 내보내기 단추가 사용자 세션에서 일련 화 된 내 보낸 데이터를 생성하는 동작을 수행하지 못했습니다. 이 작업이 완료되면 내보내기 버튼을 숨기고 '다운로드 준비 완료'했습니다. 여기를 클릭하면 내 페이지에 링크가 표시됩니다. 모든 것은 내보내기 버튼의 이벤트 핸들러 끝에있었습니다.

사용자가 다운로드 링크를 클릭하면 해당 데이터에 대한 이벤트 핸들러가 사용자에게 내보내기 데이터를 보냈습니다.

사용자가 페이지를 새로 고치거나 내보낼 수있는 데이터를 변경하는 페이지의 다른 컨트롤을 변경하기 전까지 다운로드 링크를 표시하는 것으로 선택했습니다.

관련 문제