过程:
- 用户打开网页,其中包含一个
asp:LinkButton
(下载)和一个asp:Button
(下一个)。 - “下一步”被禁用。
- 用户点击“下载”。PDF 文件在内存中生成并作为下载发布。
需要: 启用“下一步”
问题:
- 无法使用 javascript 下载 - 必须是服务器端
- 不能在没有 response.redirect 的情况下使用服务器端影响网页上的元素
- 无法发出 response.redirect,因为 httpheaders 已作为第一步的一部分发出。
如果启用,我可以使用“下一步”转到新页面,但我希望在下载完成之前禁用它。
一些相关代码:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If SessionHelper.PrintedEnvelope Or SessionHelper.PrintedTemplate Then
Me.btnNext.Enabled = True
Me.btnNext.CssClass = "nextButton"
Else
Me.btnNext.Enabled = False
End If
End Sub
Protected Sub btnEnvelopeTemplate_Click(sender As Object, e As EventArgs) Handles btnEnvelopeTemplate.Click
Try
SessionHelper.PrintedTemplate = True
Dim m As System.IO.MemoryStream = DeliveryHelper.generateEnvelope(True, "English")
Dim data As Byte() = m.ToArray
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/download"
Response.AppendHeader("Content-Length", data.Length.ToString())
Response.AppendHeader("Content-Disposition", "attachment; filename=" + "EnvelopeTemplate.pdf")
Response.AppendHeader("Accept-Ranges", "bytes")
Response.OutputStream.Write(data, 0, data.Length)
If Response.IsClientConnected Then
Response.Flush()
' Response.End()
End If
Catch ex As Exception
'stuff here
End Try
End Sub
我也对 jquery 的想法持开放态度。