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

时间:2017-11-09 00:48:47

标签: asp.net updatepanel updatepanel-progressbar

我在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>

因此,问题是,正确加载图像并正确下载文件,但即使文件下载后它仍会显示加载图像。 任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

这可能不是一个好的解决方案,但我正朝着这个方向前进。 看起来当文件下载时,页面状态永远不会设置为“完成”,它总是以“交互”结束,所以这就是我修复它的方式。

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将不会随时显示,在文件下载期间,它将设置display none,这就是我想要的。

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