ASPX页面后面的代码没有执行js代码



我有一个使用VB.NET的.aspx页面,在该页面中我只运行查询并创建和导出Excel文件。在代码的某些部分,我试图执行任何JS代码(alert、console.log等(,并尝试了不同的方式,例如:

  • 回复.Write
  • 脚本管理器注册启动脚本
  • lblJavaScript.Text="<script type='Text/javascript'>execute((;</script>">

但是以上选项都不起作用。

我的代码是这样的:

Public Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
Try
CreateExcel()
Catch ex as Exception
Finally
'' Kill other process
End Try
End Sub
Public Sub CreateExcel()
'' Do a lot of things for example run a query, open a write on an Excel file, etc...
'' This function has a lot of importance I will explain why below
DownloadReport(oExcel, "MyExcelFile.xlsx", Response)
Response.Write("<script type='text/javascript'>console.log('Hello 0');</script>")
End Sub

重要信息:逐步调试我的代码我发现如果我删除或注释DownloadReport行,我的JS代码就会被执行,所以我几乎可以肯定问题出在这个函数上。

下载报告代码:

Public Sub DownloadReport(ByVal app As Microsoft.Office.Interop.Excel.Application, ByVal Filename As String, ByRef Response As HttpResponse)
Response.Write("<script type='text/javascript'>console.log('Hello 1');</script>")
Dim bytesInStream As Byte() = GetActiveWorkbook(app)
'' I know that Response.Clear deletes the above Response.Write
Response.Clear()
'' If I comment the above lines the Js on Response.Write also works
Response.AddHeader("Content-Disposition", "attachment; filename=" & Filename)
Response.AddHeader("Content-Length", (bytesInStream.Length))
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.BinaryWrite(bytesInStream)
HttpContext.Current.ApplicationInstance.CompleteRequest()
Response.Write("<script type='text/javascript'>console.log('Hello 2');</script>")
End Sub

如果我在控制台上评论DownloadReport,我会看到Hello 0。

如果我在控制台上评论DownloadReport功能的5行,我会在该订单上看到Hello 2和Hello 0。

如果我不评论任何内容,我将不会在控制台上看到任何内容,也不会有js错误消息。

我的代码出了什么问题,我该如何解决?

"Content-Disposition:attachment; filename=filename"告诉浏览器将响应保存为文件,而不是将其呈现为HTML。在文本编辑器中打开下载的文件,您会在末尾看到script标记。

最新更新