下载文件时面板不显示

时间:2010-05-13 03:34:24

标签: c# asp.net vb.net

我在我的代码中写了下载excel文件。如果我单击下载按钮,我需要显示ajax-load图像(pnlPopup面板)。但它没有显示。我认为是因为一些“响应”声明(见下面的代码)。下载工作正常,但同时我也想显示加载器面板。

 <asp:Panel ID="pnlPopup" runat="server" visible="false">
    <div align="center" style="margin-top: 13px;">
       <asp:Image runat ="server" ID="imgDownload" src="Images/ajax-loader.gif" alt="" /> <br />
         <span class="updateProgressMessage">downloading ...</span>
    </div>

Protected Sub btnDownload_Click(ByVal sender As Object, ByVal e As EventArgs) 'Handles btnDownload.Click'
     Try

        pnlPopup.Visible = True
        Dim mSurvey As New Survey
        Dim mUser As New User
        Dim dtExcel As DataTable
        mUser = CType(Session("user"), User)
        dtExcel = mSurvey.CreateExcelWorkbook(mUser.UserID, mUser.Client.ID)
        Dim filename As String = "Download.xls"

        InitializeWorkbook()
        GenerateData(dtExcel)
        Response.ContentType = "application/vnd.ms-excel"
        Response.AddHeader("Content-Disposition", String.Format("attachment;filename={0}", filename))
        Response.Clear()
        Response.BinaryWrite(WriteToStream.GetBuffer)
        Response.End()

    Catch ex As Exception

    Finally
    End Try


End Sub

2 个答案:

答案 0 :(得分:0)

这样做的方式就是不行。您无法在同一响应中同时返回可下载文件和HTML文件。如果你在点击链接时使用JS显示该面板,那可能是最好的。

答案 1 :(得分:0)

通过服务器端代码显示元素的方法不起作用。单击按钮后,页面将回发,Excel文件将写入响应流,用户正在查看的页面将不会更改,因为您没有将HTML发送回浏览器。

相反,您可以通过使用Javascript显示图像和文本来轻松实现此功能。只需隐藏一个div标记(display: none;使用CSS),并使用按钮的OnClientClick属性,编写一些Javascript来显示div标记。

作为自己编写Javascript的替代方法,您还可以查看ASP.NET Ajax controls以获取实现此功能的帮助。