ASP.Net在新页面上显示加载覆盖

时间:2013-03-08 12:46:09

标签: c# asp.net asp.net-ajax

我目前在ASP.net网站表单网站上有两个页面。在第一页上,用户可以输入一些细节,然后按一个按钮。这将是response.redirect到下一页,用它发送用户详细信息。

下一页的页面加载次数为

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {   
            GetInformation();        
        }
    }

GetInformation()使用大约需要15-20秒的用户详细信息进行长时间处理。

当用户按下第一页上的按钮时,它会一直停留在第一页上,直到GetInformation()完​​成运行,然后它将加载新页面。

我想要做的是,当用户按下按钮时,会出现新页面,然后显示加载或其他内容,然后让它启动GetInformation()。 GetInformation完成后,叠加层将消失。

我已经在Google上进行了搜索并看到了一些想法,但它们似乎都不适合我的问题。

这样做最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

非常简单的解决方案:

  1. 创建新页面Loading.aspx。添加适当的样式和所有内容,使其看起来像预期的加载页面。

  2. 在此页面中,在<head>代码中添加以下代码:<meta http-equiv="refresh" content="0;URL='LongLoadingPage.aspx'" />

  3. 现在,不要直接重定向到LongLoadingPage.aspx,而是重定向到Loading.aspx页面。

    当然,这是一个快速肮脏的解决方案,可能有一个更好的解决方案,您使用AJAX请求初始化长时间运行的操作(使用UpdatePanel或vanilla XMLHttpRequest)。

答案 1 :(得分:1)

只有在page_load事件完全执行后才会显示页面。所以不要在page_load事件中调用你的函数。而是使用定时器控件来触发你的函数调用。

假设您添加一个像

这样的计时器控件
<asp:Timer ID="tmr" runat="server" Interval="3000" OnTick="tmr_Tick" Enabled="true">
</asp:Timer>

现在服务器端代码看起来像这样

protected void tmr_Tick(object sender, EventArgs e)
{
    tmr.Enabled = false;
    GetInformation();        
    loadingIndicator.Style.Add("display", "none");
}

现在为了显示加载指示器在页面上放置这样的div

<div id="loadingIndicator" runat="server" style="background-image:url(ajax-loader-small.gif);background-repeat: no-repeat; width: 100%; height: 104px; background-position: center;">
</div>

默认情况下会显示加载指示符,当GetInformation()执行完毕后我们可以更改显示

希望这会有所帮助......