如果使用 window.showModalDialog() 在模式弹出窗口中打开 aspx 页面,我无法从 aspx 页面下载文件。
我在 aspx 页面上有一个图像按钮,单击它时,使用一些业务逻辑生成了一个 Excel 文件,然后我将其添加到响应标头以使该文件可供下载。代码如下图所示,
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
当我将这个 aspx 页面作为模式弹出窗口打开时,它不会显示浏览器的下载窗口。在正常情况下(无模式,使用 window.open 打开)弹出下载工作正常。
我也尝试过使用另一种方法来下载文件。我没有在 中设置响应标头ibtnExport_Click
,而是打开了另一个 aspx 页面,例如 Download.aspx,使用window.open
并在 Download.aspx 的页面加载事件中设置响应标头。代码如下图所示,
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
在 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
好吧,它在模态和非模态弹出窗口的情况下都有效,并且在您将应用程序部署到 IIS 上之前提供了重生:)。是的,这种方法适用于 ASP.NET 开发服务器,但不适用于 IIS。
有什么想法可以在模态弹出窗口上进行下载吗?