Je ne suis pas en mesure de télécharger un fichier à partir d'une page aspx si la page aspx est ouverte dans une fenêtre modale en utilisant window.showModalDialog(). J'ai un bouton image sur la page aspx, un clic sur un fichier Excel a été généré en utilisant une logique métier, puis je l'ajoute à l'en-tête Response pour rendre ce fichier disponible au téléchargement. Le code est comme indiqué ci-dessous,Impossible de télécharger à partir du dialogue modal, window.showModalDialog
Protected Sub ibtnExport_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ibtnExport.Click
...
Some business logic to generate excel file.
...
Response.ClearHeaders()
Response.ContentType = "application/ms-excel"
Response.AddHeader("content-disposition", "attachment; filename=" + someXLSFile)
Response.TransmitFile(someXLSFileWithPath)
Response.Flush()
HttpContext.Current.ApplicationInstance.CompleteRequest()
End Sub
Quand j'ouvre cette page ASPX comme un pop up modal il ne montre pas la fenêtre de téléchargement du navigateur. Dans le cas d'un téléchargement contextuel normal (modélisé, ouvert en utilisant window.open), le téléchargement fonctionne correctement.
J'ai également essayé d'utiliser une autre approche pour télécharger des fichiers. Au lieu de définir l'en-tête de réponse dans ibtnExport_Click
, j'ai ouvert une autre page aspx, dites Download.aspx, en utilisant window.open
et définissez les en-têtes repsonse sur l'événement de chargement de page de Download.aspx. Le code est comme indiqué ci-dessous,
Protected Sub ibtnExport_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ibtnExport.Click
...
Some business logic to generate excel file.
...
Session("$FileToDownload$") = someXLSFileWithPath
ClientScript.RegisterStartupScript(GetType(String),"download","window.open('Download.aspx')",true)
End Sub
Et Download.aspx,
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim filetoDownload As String = CType(Session("$FileToDownload$"), String)
Dim fileName As String = System.IO.Path.GetFileName(filetoDownload)
Response.ClearHeaders()
Response.ContentType = "application/ms-excel"
Response.AddHeader("content-disposition", "attachment; filename=" + fileName)
Response.TransmitFile(filetoDownload)
Response.Flush()
HttpContext.Current.ApplicationInstance.CompleteRequest()
End Sub
Eh bien, cela fonctionne dans le cas des deux modes, ainsi que pop-up et modales donne une relife jusqu'à ce que vous déployez l'application sur IIS :). Oui, cette approche fonctionne sur le serveur de développement ASP.NET mais ne fonctionne pas sur IIS. Des idées pour que le téléchargement fonctionne sur les fenêtres pop-up modales?
Je suppose que vous avez sur votre page, il vous suffit de définir la cible de votre lien hypertexte à _blank. –
cstruter