Redirection d’une page après un téléchargement au format PDF

J’ai une page aspx (disons 1.aspx) d’où je télécharge d’abord un fichier pdf, puis je souhaite redirect vers une page Thanks.aspx Le code est le suivant:

protected void btnSubmit_Click(object sender, EventArgs e) { ssortingng pathId = ssortingng.Empty; if (Page.IsValid) { try { pathId = hidId.Value; DownloadPDF(pathId); Response.Redirect("Thanks.aspx"); } catch (Exception ex) { throw ex; } } } protected void DownloadPDF(ssortingng pathId) { if (!(ssortingng.IsNullOrEmpty(pathId))) { try { Response.ContentType = "application/pdf"; Response.AppendHeader("Content-Disposition", "attachment; filename=" + pathId + ".pdf"); ssortingng path = ConfigurationManager.AppSettings["Pdf_Path"].ToSsortingng() + "\\" + pathId.Trim() + ".pdf"; Response.TransmitFile(path); } catch (Exception ex) { throw ex; } finally { HttpContext.Current.ApplicationInstance.CompleteRequest(); } } } 

Le problème est que, la boîte de dialog de sauvegarde de fichier arrive correctement et que je peux également télécharger le fichier, mais il n’est pas redirigé vers la page Thanks.aspx.

Comment résoudre ce problème?

J’ai trouvé plus facile de placer la page de téléchargement PDF dans une iframe. De cette façon, vous pouvez activer le téléchargement PDF côté client en pointant simplement la source iframe vers la page de téléchargement PDF. Après cela, vous pouvez soit passer à une nouvelle page, soit simplement afficher le texte de remerciement directement sur celui de la page contenant l’iframe.

Si le fichier vient d’être téléchargé, aucun prétraitement n’est effectué, vous pouvez essayer les solutions suivantes:

 Response.AddHeader("Refresh", "12;URL=nextpage.aspx"); 

Où le nombre est le nombre de secondes avant l’actualisation 🙂

En HTTP, une demande ne peut avoir qu’une seule réponse. Étant donné que la première réponse est le fichier PDF, la réponse secondes (c’est-à-dire la redirection) ne peut pas être implémentée.

Vous pouvez essayer de redéfinir les deux pages en redirigeant vers thanks.aspx et en demandant à thanks.aspx de lancer le téléchargement automatiquement.

En réalité, un Response.Redirect envoie une réponse au navigateur indiquant que cette ressource a été déplacée vers une autre URL. Cependant, vous essayez également d’envoyer un fichier dans une réponse, de sorte que ces deux éléments sont probablement en conflit l’un avec l’autre. Essayez de renvoyer un peu de JavaScript qui les envoie également à la page que vous souhaitez leur envoyer au lieu d’utiliser un Response.Redirect.

 ScriptManager.RegisterStartupScript(Me, Me.GetType(), "redirectScript", "window.location.href='whateverurlhere.aspx';", True) 

Voir l’article mentionné dans cette réponse acceptée: https://stackoverflow.com/a/11018277/1037864 (lien direct: http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog- dans le navigateur / )

L’idée est de définir un cookie et de l’envoyer avec le fichier. En attendant, vous laissez la page en attente bloquer l’interface utilisateur en attendant l’arrivée du cookie.