【问题标题】:How to download a file from a content page inside UpdatePanel in ASP如何从 ASP 中的 UpdatePanel 内的内容页面下载文件
【发布时间】:2020-04-09 18:45:01
【问题描述】:

我想从 ASP 网络表单页面下载文件。

如果我使用没有 MasterPage 的 WebForm,一切都很好,我有一个带有这个的 LinkBut​​ton

    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>

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

感谢您的帮助。

已解决:请看下面的答案。

【问题讨论】:

  • 你的事件触发了吗?放置断点时会发生什么?
  • @mxmissile 是的,事件正在触发,它到达了 Response.End() 但没有到达最终的 End 就在那里完成,我怀疑这是这里的问题,但我不知道怎么办。
  • UpdatePanel 使用 AJAX,我严重怀疑您是否可以像这样与 Response 对象交互以下载文件。查看 UpdatePanel 触发器,也许可以解决这些问题。
  • @mxmissile 这似乎是问题所在,但 UpdatePanel 触发器无法访问 ContenPlaceHolder 内的控件。您知道我可以查看任何代码或文章来执行此操作吗?

标签: asp.net


【解决方案1】:

已解决:

我刚刚添加了另一个带有触发器的 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2023-03-15
    • 2016-01-20
    • 2011-04-22
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多