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 초 내에 시작되지 않으므로 여기를 클릭하십시오").
의견이 있으십니까?