我目前在ASP.net网站表单网站上有两个页面。在第一页上,用户可以输入一些细节,然后按一个按钮。这将是response.redirect到下一页,用它发送用户详细信息。
下一页的页面加载次数为
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetInformation();
}
}
GetInformation()使用大约需要15-20秒的用户详细信息进行长时间处理。
当用户按下第一页上的按钮时,它会一直停留在第一页上,直到GetInformation()完成运行,然后它将加载新页面。
我想要做的是,当用户按下按钮时,会出现新页面,然后显示加载或其他内容,然后让它启动GetInformation()。 GetInformation完成后,叠加层将消失。
我已经在Google上进行了搜索并看到了一些想法,但它们似乎都不适合我的问题。
这样做最好的方法是什么?
答案 0 :(得分:1)
非常简单的解决方案:
创建新页面Loading.aspx
。添加适当的样式和所有内容,使其看起来像预期的加载页面。
在此页面中,在<head>
代码中添加以下代码:<meta http-equiv="refresh" content="0;URL='LongLoadingPage.aspx'" />
现在,不要直接重定向到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()
执行完毕后我们可以更改显示
希望这会有所帮助......