2009-05-16 7 views
5

J'utilise ASP.NET2.0. J'ai créé un formulaire de téléchargement avec des champs de saisie et un bouton de téléchargement. Lorsque le bouton de téléchargement est cliqué, je veux rediriger l'utilisateur vers une page "Merci de télécharger ..." et lui proposer immédiatement le fichier à sauvegarder.Redirection vers une page "Merci" et offrant la boîte de dialogue de sauvegarde du fichier téléchargé immédiatement

Je possède ce code suivant pour afficher la boîte de dialogue savefile:

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

De toute évidence, ce code ne permet pas d'afficher tout message « Merci ». Y at-il un événement "AfterRender" ou quelque chose de similaire de la page où, je pourrais déplacer ce code de téléchargement et donner une chance à la page de rendre le message de "remerciement" à l'utilisateur? Après tout, je leur suis vraiment reconnaissant, alors je veux exprimer cela.

Répondre

6

Vous pouvez référencer une page de téléchargement de votre page de remerciement à l'aide d'un IFrame

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

Dans ce cas, DownloadFile.aspx aurait le code derrière de votre exemple.

1

Utilisez une balise META REFRESH dans la tête de votre page de remerciement:

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

Alternativement, vous pouvez utiliser une fonction onLoad du corps pour remplacer l'emplacement actuel avec l'URL de téléchargement.

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

Dans ce cas, la redirection commencera après la page en cours a fini de charger et seulement si le client JavaScript est activé, donc pas oublier d'inclure un lien avec un lien de téléchargement ("Si le téléchargement ne commencer dans quelques secondes ... "et ainsi de suite).

Vous pouvez également utiliser un IFRAME tel que suggéré par Phil, ou même un FRAME ou un pop-up complet (blocable, attention à vous). Votre kilométrage peut varier.

1

Le code que vous avez écrit, devrait effectivement être redirigé à partir de la page «merci» (ce qui en fait la deuxième redirection). Comme vous avez défini la disposition du contenu en pièce jointe, cette page ne remplacera pas la page de remerciement existante.

1

Si vous souhaitez diffuser une page "Merci" et le fichier, le client doit appeler deux fois le serveur. Donc, vous pouvez simplement créer la page thankyou.aspx pour afficher le message (et peut-être mettre un lien de téléchargement direct vers le fichier). Vous pouvez commencer le téléchargement avec une balise meta ou simplement en utilisant js (même ms fait de même pour leur page de téléchargement). Ensuite, pour servir le fichier, vous devez créer un lien direct pour éviter qu'une autre page ne soit exécutée sur le serveur; sinon vous devriez créer un HttpHandler juste pour cacher les filesys.

Le fichier doit être envoyé au client avec Response.TrasmitFile