ASP.NET - 页面加载时显示消息

时间:2010-06-10 18:05:10

标签: c# asp.net javascript

我有一个页面在page_load方法中执行长时间运行的任务(10到15秒)。

我有客户端的javascript代码,会向用户显示一个体面的“页面加载”动画gif。

我能够从代码隐藏中调用JavaScript方法,以显示“页面加载”动画gif,但是,长时间运行的任务正在挂起UI,使得动画gif实际上不会显示,直到在长时间运行的任务完成之后,这与我想要的完全相反。

为了测试这一点,在我的page_load方法中,我调用JavaScript方法来显示动画gif。然后,我使用Thread.Sleep(10000)。发生的事情是,直到Thread.Sleep完成后才会显示动画gif。

显然我做错了。

任何建议都将受到赞赏。

感谢。

克里斯

以下是代码隐藏的示例:

protected void Page_Load(object sender, EventArgs e)
    {
        ClientScript.RegisterStartupScript
              (GetType(), "Javascript", "javascript: ShowWaitIndicator(); ", true);

        Response.Flush();

        Thread.Sleep(10000);
    }

6 个答案:

答案 0 :(得分:4)

我通过在页面上放置一个计时器来完成此操作。在第一次打勾后,禁用它并运行您的任务。

<asp:Timer runat="server" id="UpdateTimer" interval="500" ontick="UpdateTimer_Tick" />

我把它放在UpdatePanel中以满足我的需求。我不确定哪种方法最适合你。然后在你的代码后面......

Protected Sub UpdateTimer_Tick(ByVal sender As Object, ByVal e As EventArgs)
        UpdateTimer.Enabled = False

        ' run method here

    End Sub

答案 1 :(得分:4)

原因是Page.Load事件在任何响应发送到客户端之前触发;因此,在客户端收到响应之前,不会发生客户端的任何指示(例如执行javascript)。

所以......在Page.Load中放置长时间运行的任务将无法获得您想要的效果。这听起来像是使用AJAX或其他形式的异步数据检索的情况。在这种情况下,您返回到客户端的页面不会包含您长时间运行的任务的结果 - 因此页面本身(使用它的微调器)快速加载,然后客户端请求数据;当数据准备就绪(10-15秒后),您可以使用结果更新客户端中的DOM。

答案 2 :(得分:4)

以下示例适合您。只是放在页面加载事件中。

  Response.Write("<div id=\"loading\" style=\"position:absolute; width:100%; text-align:center; top:300px;\"><img src=\"http://www.cse.iitk.ac.in/users/singhroh/images/loading.gif\" border=0></div>");
  Response.Flush();
  System.Threading.Thread.Sleep(5000);        
  Response.Write("script>document.getElementById('loading').style.display='none';</script>");

答案 3 :(得分:1)

我会避免从代码隐藏中调用你的JavaScript。

相反,使用jQuery库。您可以使用以下代码在加载DOM后立即触发代码:

$(document).ready(function() {
     //Call your JavaScript method here.
});

您还需要将jQuery添加到您的页面,这是Microsoft CDN中包含的单个脚本。将其添加到您的标记中即可:

<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js"></script>

这将在页面加载时立即调用您的GIF JavaScript方法,您可以消除Thread.Sleep。我假设您的动画GIF方法会在10-15秒后自动隐藏图像。

答案 4 :(得分:1)

从旧学校开始,你可以关闭缓冲。启用缓冲(默认设置)后,页面会在发送到客户端之前以其完整性生成。如果您关闭缓冲,它会在加载时发送,因此您可以发送html来切换加载图形,执行长时间运行的任务,然后发送一些javascript来关闭它。

答案 5 :(得分:0)

听起来像是在ASP onload进程之后显示Javascript onload。您可能希望将时间密集型操作延迟到Page.LoadComplete - 这样,您的用户将在密集操作发生之前看到Javascript渲染。

然后,您将在函数完成后根据需要更新页面内容。

您能提供代码示例吗?