【发布时间】:2018-12-07 03:19:25
【问题描述】:
我有一个带有 VB.NET 的 .aspx 页面,在这个页面中我只运行一个查询并创建和导出一个 Excel 文件。在代码的某些部分中,我尝试执行任何 JS 代码(alert、console.log 等),并且我尝试了不同的方式,例如:
- Response.Write
- ScriptManager.RegisterStartupScript
- 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 错误消息。
我的代码有什么问题,我该如何解决?
【问题讨论】:
标签: javascript asp.net vb.net