Behandlung eines ASP.NET MVC FileResult, das in einem (jQuery-) Ajax-Aufruf zurückgegeben wurde

8

Ziel:
Ich möchte meinen Nutzern erlauben, eine Datei auf meiner Webseite herunterzuladen. Ich möchte ein neues Fenster öffnen und die Datei dort anzeigen oder herunterladen.

Meine Implementierung:
Diese Datei muss jedoch zuerst auf der Serverseite generiert werden, was eine Weile dauern kann. Wenn der Benutzer auf die Schaltfläche klickt, um die Datei herunterzuladen, führe ich einen Ajax-Anruf aus und zeige eine wartende Animation an, bis ich eine Antwort erhalte. Die Controller-Aktion, die den Aufruf behandelt, generiert die Datei (PDF) und gibt ein FileResult zurück. Jetzt in der Succes-Funktion von meinem Ajax-Aufruf zurück in Javascript, bekomme ich die Dateidaten.

Problem: Ich habe keine Idee, was ich mit diesen Daten machen soll, um es dem Benutzer zu vermitteln.

Workaround:
Im Moment verwende ich einen Workaround, bei dem ich die Datei im Ajax-Aufruf nicht zurückgebe, sondern sie in der Session ablege. In der Succes-Funktion mache ich window.open("/controller/getPDFFromSession") , die die Datei herunterladen wird. Ich bevorzuge es jedoch, die Sitzung nicht für diese Art von Dingen zu verwenden.

Vielen Dank im Voraus.

    
Matthijs Wessels 17.05.2011, 09:10
quelle

1 Antwort

7
  

Problem: Ich habe keine Ahnung, was ich mit diesen Daten machen soll, um es an den Benutzer zu bringen.

Aus diesem Grund sollten Sie AJAX nicht zum Herunterladen von Dateien verwenden. Sie könnten Folgendes tun:

  1. Der Benutzer klickt auf den Download-Button
  2. Unter Verwendung von Javascript zeigen Sie ein Fortschrittsbild an, das ihn informiert, dass er warten muss
  3. Mit Javascript generieren Sie einen versteckten iFrame und injizieren ihn in das DOM, wobei die Eigenschaft src auf die Controller-Aktion verweist, die die Datei
  4. erzeugen soll
  5. Sobald der iFrame geladen ist, können Sie das Fortschrittsbild ausblenden
Darin Dimitrov 17.05.2011, 12:44
quelle

Tags und Links