如何在ASP中从UpdatePanel内的内容页下载文件



我想从ASP网页下载一个文件。

如果我使用没有MasterPage的WebForm,一切都很好,我有一个带有的LinkButton

Private Sub linkDOWNLOAD_Click(sender As Object, e As EventArgs) Handles linkDOWNLOAD.Click
Dim filePath = "C:files" + DropDownList1.SelectedItem.Value
Dim fileStream As Stream = streamClient.someWebServiceReturningFileStream(filePath)
Dim buffer(65536) As Byte
Dim bytesRead = 0
Response.BufferOutput = False
HttpContext.Current.Response.Clear()
HttpContext.Current.Response.ClearHeaders()
HttpContext.Current.Response.ContentType = "application/octet-stream"
HttpContext.Current.Response.AddHeader("Content-Disposition",
"attachment; filename=" + DropDownList1.SelectedItem.Value)
bytesRead = fileStream.Read(buffer, 0, buffer.Length)
While (bytesRead > 0)
If (Response.IsClientConnected) Then
Response.OutputStream.Write(buffer, 0, bytesRead)
Response.Flush()
buffer = New Byte(65536) {}
bytesRead = fileStream.Read(buffer, 0, buffer.Length)
Else
bytesRead = -1
End If
End While
Response.Flush()
Response.Close()
Response.End()
End

正如我所说,这很好,浏览器打开对话框下载文件,但如果我在MasterPage中的内容页面内的按钮中尝试相同的代码,则不会发生任何事情。

主页面有以下更新面板:

...
<asp:UpdatePanel ID="updatePanelBODY" runat="server">
<ContentTemplate>
<asp:ContentPlaceHolder ID="contentBODY" runat="server">
</asp:ContentPlaceHolder>                    
</ContentTemplate>
</asp:UpdatePanel>
...

内容页面:

<asp:Content ID="Content2" ContentPlaceHolderID="contentBODY" runat="server">
<asp:LinkButton ID="linkDOWNLOAD" runat="server">Download File</asp:LinkButton>
</asp:Content>

我不知道如何解决这个问题,我发现的每个例子都是基于没有主页的网络表单。

谢谢你的帮助。

解决:看下面的答案。

已解决:

我刚刚添加了另一个带有触发器的UpdatePanel,以便在子页面内执行回发。

<asp:Content ID="Content2" ContentPlaceHolderID="contentBODY" runat="server">
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:LinkButton ID="linkDOWNLOAD" runat="server">Download
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="linkDOWNLOAD" />
</Triggers>
</asp:UpdatePanel>    
</asp:Content>

最新更新