Asp.net 如何在HTTP响应中发送文件和页面?
我有一个ASP.NET页面,在其中生成Excel电子表格并将其发送到响应中(内容处置标题)。这一部分工作得很好,但我有一个按钮永远不会重新启用,因为原始页面不是响应的一部分 下面是我正在使用的函数:Asp.net 如何在HTTP响应中发送文件和页面?,asp.net,http-headers,response,Asp.net,Http Headers,Response,我有一个ASP.NET页面,在其中生成Excel电子表格并将其发送到响应中(内容处置标题)。这一部分工作得很好,但我有一个按钮永远不会重新启用,因为原始页面不是响应的一部分 下面是我正在使用的函数: Public Shared Sub WriteToResponse(ByVal theWorkBook As Workbook, ByVal FileName As String, ByVal resp As HttpResponse) Dim theStream As New System
Public Shared Sub WriteToResponse(ByVal theWorkBook As Workbook, ByVal FileName As String, ByVal resp As HttpResponse)
Dim theStream As New System.IO.MemoryStream()
theWorkBook.Save(theStream)
Dim byteArr As Byte() = DirectCast(Array.CreateInstance(GetType(Byte), theStream.Length), Byte())
theStream.Position = 0
theStream.Read(byteArr, 0, CInt(theStream.Length))
theStream.Close()
resp.Clear()
resp.AddHeader("content-disposition", "attachment; filename=" & FileName)
resp.BinaryWrite(byteArr)
resp.End()
End Sub
我尝试不清除响应,而是使用AppendHeader而不是AddHeader,但响应仍然只包含文件
我错过了什么?我需要使用不同的标题吗?我发现了这个;听起来像是我的问题。您不能在同一响应中发回文件和新页面
我不确定该解决方案如何满足您的特定需求,但请记住,您可以在文件创建请求发送到服务器之前使用Javascript启用或禁用按钮(这样,当用户开始下载电子表格时,按钮已经处于您想要的状态).您不能在同一响应中发回文件和新页面
我不确定该解决方案如何满足您的特定需求,但请记住,您可以在文件创建请求发送到服务器之前使用Javascript启用或禁用按钮(这样,当用户开始下载电子表格时,按钮已经处于您想要的状态)。您不能。您可以通过单击按钮打开一个弹出窗口,让弹出窗口提供文件并从javascript发回页面来伪造行为。但通过这种方式,您实际上创建了两个请求和两个响应 更新:如果你想在他们开始下载时禁用该按钮,并在下载开始后立即启用它,你不能真正做到这一点,但你可以使用一些技巧使其看起来像那样。当他们点击下载按钮时,使用一些javascript来禁用按钮并创建弹出窗口,启动文件流。当filestreaming函数(WriteToResponse)返回时,在用户会话中设置一些值。同时,让原始页面使用AJAX轮询服务器,查看会话值是否已设置。如果已设置,请重新启用按钮,并再次将值设置为空或假(因此这将第二次起作用)。但这看起来像是一大堆把戏
但我认为在这种情况下,治疗比问题更糟糕。我假设您希望这样做,因为生成文件需要一段时间,您不希望用户在准备文件时不耐烦地按下按钮来重置流。要完成这一点,我只需在“按钮按下”页面上显示一条弹出消息,上面写着“您的下载正在准备中。这可能需要一分钟。感谢您的耐心。(单击以取消此消息)您不能。您可以通过单击按钮打开一个弹出窗口,让弹出窗口提供文件并从javascript发回页面来伪造行为。但通过这种方式,您实际上创建了两个请求和两个响应 更新:如果你想在他们开始下载时禁用该按钮,并在下载开始后立即启用它,你不能真正做到这一点,但你可以使用一些技巧使其看起来像那样。当他们点击下载按钮时,使用一些javascript来禁用按钮并创建弹出窗口,启动文件流。当filestreaming函数(WriteToResponse)返回时,在用户会话中设置一些值。同时,让原始页面使用AJAX轮询服务器,查看会话值是否已设置。如果已设置,请重新启用按钮,并再次将值设置为空或假(因此这将第二次起作用)。但这看起来像是一大堆把戏 但我认为在这种情况下,治疗比问题更糟糕。我假设您希望这样做,因为生成文件需要一段时间,您不希望用户在准备文件时不耐烦地按下按钮来重置流。要完成此操作,我只需在“按钮按下”页面中显示一条弹出消息,内容类似于“您的下载正在准备中。这可能需要一分钟。感谢您的耐心。(单击以取消此消息)