如何从数据库中检索数据时停止javascript加载器

时间:2018-04-10 11:14:33

标签: javascript c# asp.net loader excelpackage

我正在使用带有setTimeout函数的javascript来在onclient上单击按钮显示GIF。我试图在从数据库中检索数据后停止/隐藏GIF。到目前为止没有运气。我尝试了以下内容。非常感谢任何帮助。

CSS

.modal {
     position: fixed;
     top: 0;
     left: 0;
     background-color: black;
     z-index: 99;
     opacity: 0.9;
     filter: alpha(opacity=80);
     -moz-opacity: 0.9;
     min-height: 100%;
     width: 100%;
}
.loading {
     font-family: Arial;
     font-size: 10pt;
     width: 200px;
     height: 100px;
     display: none;
     position: fixed;
     opacity: 0.9;
     z-index: 999;
}

的Javascript

function ShowLoader() {
    if (Page_ClientValidate('DownloadReport')) {
        setTimeout(function() {
            var modal = $('divLoader');
            modal.addClass('modal');
            $('body').append(modal);
            var loading = $('.loading');
            loading.show();
            var top = Math.max($(window).height() / 2 - loading[0].offsetHeight / 2, 0);
            var left = Math.max($(window).width() / 2 - loading[0].offsetWidth / 2, 0);
            loading.css({
                top: top,
                left: left
            });
        }, 100);
    } else {

    }
};

      function HideLoader() {
        document.getElementById('<%= divLoader.ClientID%>').style.visibility = "hidden";
    };

所以点击按钮我会调用showLoader,

 <asp:Button ID="btnGenerateRep" CssClass="btnGenerateRep" runat="server" Text="Download Report" ValidationGroup="DownloadReport" OnClientClick="ShowLoader();" OnClick="btnGenerateRep_Click" />

我想在从数据库中检索数据时停止它

C#代码,

DataTable dt = new DataTable();

dt.Load(cmd.ExecuteReader());

if (dt.Rows.Count > 0) {

    ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "HideLoader()", true);

    string dateTimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss");
    string excelFileName = aliasName + "-" + dateTimeStamp + ".xlsx";
    string worksheetsName = "Sheet";

    var format = new ExcelTextFormat();
    format.Delimiter = ',';
    format.EOL = "\r";

    using(ExcelPackage package = new ExcelPackage()) {
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);
        worksheet.Cells["A1"].LoadFromDataTable(dt, true);

        Response.Clear();
        package.SaveAs(Response.OutputStream);
        Response.AddHeader("content-disposition", "attachment; filename=" + excelFileName + ";");
        Response.Charset = "";
        Response.ContentType = "application/vnd.xlsx";
        Response.End();

    }
}     

我正在使用C#代码调用javascript,但它没有触发。或者,当SaveAs对话框从package.SaveAs出现时,我可以捕获Save命令,然后从那里调用javascript吗?

我还尝试隐藏了收到数据时GIF所在的asp:Panel。仍然没有运气。我真的很感激任何帮助。非常感谢

1 个答案:

答案 0 :(得分:0)

作为第一步动作 ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "HideLoader()", true);if (dt.Rows.Count > 0) { ... }

出来

因为这意味着如果有0行,它将永远不会添加脚本,因此它永远不会被客户端执行,所以它也永远不会隐藏加载。

作为第二个测试HideLoader并查看是否收到警报。

function HideLoader() {
   alert('test');
};

如果你收到警报,则意味着它被调用。之后添加自己的行并检查是否有效。

另外既然你使用jquery.show也许只是用同样的方式来隐藏它?如果需要,请检查this 以更改该内容。

 $('.loading').hide();