即使在文件下载完成后,带有 PostbackTrigger 的 UpdatePanel 也会冻结

UpdatePanel with PostbackTrigger froze even after file download is complete

我试图在 excel 文件下载期间使用图像加载器。这是我当前的代码。

在Javascript

function ShowProgress() {
    document.getElementById('<% Response.Write(prgLoadingStatus.ClientID); %>').style.display = "inline";
}

在aspx页面中

<asp:UpdatePanel ID="upAlignBuyer" runat="server" UpdateMode="Conditional" EnableViewState="true" >
<ContentTemplate>
    <asp:Button ID="Button2" Text="Download BWS" CssClass="app_button" 
        Font-Bold="true" value="DownloadExcel"  OnClick="Download_Click" OnClientClick="ShowProgress();"
        runat="server"  Height="23px" Width="120px"></asp:Button>
    <asp:UpdateProgress ID="prgLoadingStatus" runat="server" DynamicLayout="true" AssociatedUpdatePanelID="upAlignBuyer"  >
        <ProgressTemplate>
            <div id="overlay">
                <div id="modalprogress">
                    <div id="theprogress">
                        <asp:Image ID="imgWaitIcon" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/App_Themes/Images/progress.gif" />
                            Please wait...
                    </div>
                </div>
            </div>
        </ProgressTemplate>
    </asp:UpdateProgress>
</ContentTemplate>
<Triggers>
    <asp:PostBackTrigger ControlID="Button2" />
</Triggers>
</asp:UpdatePanel>

所以这个问题是,加载图像加载正确,文件下载正确,但即使在文件下载后它仍然显示加载图像。 任何帮助都会很棒。

这可能不是一个好的解决方案,但我正朝着这个方向努力。 看起来当文件下载时页面状态从未设置为 "complete" 它总是以 "interactive" 结尾所以这就是我修复它的方式。

document.onreadystatechange = function () {
      if (document.readyState === "interactive") {
                 HidePrograss();
      }
}

function ShowProgress() {
    document.getElementById('<% Response.Write(prgLoadingStatus.ClientID); 
             %>').style.display = "inline";
 }

function HidePrograss() {
      document.getElementById('<% Response.Write(prgLoadingStatus.ClientID); 
            %>').style.display = "none";
}

这样updateprogress不会随时显示,在文件下载期间它会设置显示none这就是我想要的。

如果有人有更好的解决方案,请告诉我。