2009-05-16 9 views
5

Ich benutze ASP.NET2.0. Ich habe ein Download-Formular mit einigen Eingabefeldern und einem Download-Button erstellt. Wenn der Download-Button angeklickt wird, möchte ich den Benutzer zu einer "Danke fürs Herunterladen ..." Seite umleiten und ihm sofort die Datei zum Speichern anbieten.Umleiten zu einer "Danke" -Seite und bietet die Speichern-Dialog der heruntergeladenen Datei sofort

Ich habe diesen folgenden Code, um den Savefile Dialog zu zeigen:

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(); 
    } 
} 

Offensichtlich ist dieser Code erlaubt keine, um „Danke“ -Meldung. Gibt es ein "AfterRender" -Ereignis oder etwas Ähnliches auf der Seite, wo ich diesen Download-Code verschieben und eine Chance geben könnte, dass die Seite die "Danke" -Meldung an den Benutzer rendert? Schließlich bin ich ihnen wirklich dankbar, also möchte ich das ausdrücken.

Antwort

6

Sie könnten

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

In diesem Fall eine Download-Seite von Ihrem Dank Seite unter Verwendung eines IFrame verweisen, würde DownloadFile.aspx den Code aus Ihrem Beispiel hat hinten.

1

Verwenden Sie einen META REFRESH-Tag im Kopf Ihrer Dank Seite:

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

Alternativ könnten Sie einen Körper onLoad-Funktion verwenden, um die aktuelle Position mit der Download-URL zu ersetzen.

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

In diesem Fall wird die Umleitung starten, nachdem die aktuelle Seite vollständig geladen ist und nur dann, wenn der Client JavaScript aktiviert ist, so denken Sie daran, eine Verbindung mit einem Download-Link enthalten ("Wenn der Download nicht funktioniert in ein paar Sekunden starten ... "und so weiter).

Sie können auch einen IFRAME verwenden, wie von Phil vorgeschlagen, oder sogar einen FRAME oder ein vollständiges Pop-up (blockierbar, wohlgemerkt). Ihre Laufleistung kann variieren.

1

Der Code, den Sie geschrieben haben, sollte eigentlich von der "Danke" Seite umgeleitet werden (so dass es die 2. Weiterleitung ist). Da Sie die Inhaltsdisposition auf Anhang festgelegt haben, ersetzt diese Seite nicht die vorhandene "Danke" -Seite.

1

Wenn Sie eine "Danke" Seite und die Datei dienen möchten, muss der Client den Server zweimal aufrufen. Sie können also nur die Thankyou.aspx Seite für die Anzeige der Nachricht erstellen (und vielleicht einen direkten Download-Link zu der Datei). Sie können den Download mit einem Meta-Tag beginnen oder einfach mit js (sogar ms machen das gleiche für ihre Download-Seite).

Dann, um die Datei zu liefern, sollten Sie eine direkte Verbindung erstellen, um eine andere Seite zu vermeiden, die auf dem Server ausgeführt wird; Andernfalls sollten Sie einen HttpHandler erstellen, um die Dateien zu verbergen.

Die Datei sollte mit Response.TrasmitFile