我在我的代码中写了下载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
答案 0 :(得分:0)
这样做的方式就是不行。您无法在同一响应中同时返回可下载文件和HTML文件。如果你在点击链接时使用JS显示该面板,那可能是最好的。
答案 1 :(得分:0)
通过服务器端代码显示元素的方法不起作用。单击按钮后,页面将回发,Excel文件将写入响应流,用户正在查看的页面将不会更改,因为您没有将HTML发送回浏览器。
相反,您可以通过使用Javascript显示图像和文本来轻松实现此功能。只需隐藏一个div
标记(display: none;
使用CSS),并使用按钮的OnClientClick
属性,编写一些Javascript来显示div标记。
作为自己编写Javascript的替代方法,您还可以查看ASP.NET Ajax controls以获取实现此功能的帮助。