页面加载时的加载消息






4.87/5 (44投票s)
当 page_load 中的函数需要很长时间时,
引言
很多时候,Web 开发者会遇到在 Page_Load
事件中需要执行大量耗时操作的情况,而我们显然不希望最终用户看到一个纯白色的屏幕。一个“正在加载..”的消息或加载 GIF 会更友好。本文介绍了如何显示这样的消息。
Using the Code
完整的示例网站可以从 这里 下载。
使用 .Net IDE 打开网站:打开->网站->文件系统->(下载并解压缩的文件夹)。
代码
加载消息可以通过两种不同的方式显示。让我们看看这两种方式。
方法 1
这里目标页面不是直接调用的。而是调用一个包含加载消息的 HTML 页面,该页面会立即调用目标页面(通过 JavaScript)。
单击按钮时,将调用一个 JavaScript 函数,该函数会将用户重定向到“加载”HTML 页面。
<input id="btnLoad" type="button" value="Load Page" onclick="LoadPage()" />
JavaScript 函数
<script type="text/javascript">
function LoadPage()
{
var loadPageURL = '\Loading.html'; //Intermediate page with "Loading" message
window.location = loadPageURL;
return false;
}
</script>
在“加载”页面的 body 中,我们添加一个在页面加载时调用的函数。
页面内容只包含一个 GIF 图像。添加您想向用户提供的任何信息。
<body onload="Redirect()">
页面加载时,将调用此 JavaScript,它会立即重定向到实际页面。但是,此页面的内容将在其他页面完全加载之前显示在浏览器中。
<script type="text/javascript">
function Redirect()
{
window.location = '\SlowPage.aspx'; // Redirect immediately to the actual page
}
</script>
方法 2
第二种方法稍微复杂一些。我们不使用重定向。这里使用的技术是将 page_load
期间执行的操作移动到 button_click
事件(隐藏按钮的事件),并且页面加载不包含任何内容。因此,页面加载速度很快。页面 HTML 内容中放置了一个加载消息,显示出来。然后,使用延迟的 JavaScript 调用,我们触发一个回发(按钮单击事件)。在那里,我们将执行所有实际打算在 page_load
中执行的操作。
在页面加载时,我们调用一个 JavaScript 函数。
<body onload="PageLoad()">
被调用的 JavaScript 函数会触发延迟的按钮单击事件(使用 setTimeout
)。
<script type="text/javascript">
var _isInitialLoad = true;
function PageLoad()
{
if(_isInitialLoad)
{
//Check to make sure the page load doesn't gets called over and over
if (document.getElementById('hdnLoaded').value)
{
_isInitialLoad = false;
//Triggering a postback after 100 milliseconds
setTimeout('__doPostBack(\'<%= this.btnPageLoad.ClientID % > \' , \' \' );' ,100);
}
}
}
</script>
隐藏按钮,在其单击事件中执行所有页面加载事件,以及隐藏文本框,用于告诉我们页面加载操作是否完成。
<asp:Button ID="btnPageLoad" runat="server" Text="Page Load"
OnClick="btnPageLoad_Click"
Style="display: none" UseSubmitBehavior="false" />
<input type="hidden" id="hdnLoaded" runat="server"/>
“正在加载
”消息。(分组在 div
标签中。)
<div id="divLoading" runat="server" style="text-align: center">
<br /><br /><br /><br />
<span style="font-size: 10pt; font-family: Verdana">
[Please wait while the page is loading...]
</span>
<br />
<img src="Images/ajax-loader.gif" alt="Loading..." /><br />
</div>
服务器端代码如下所示。所有页面加载操作(或至少是耗时且独立的的操作)都移动到按钮单击事件。
protected void btnPageLoad_Click(object sender, EventArgs e)
{
//Some operation that takes long time
//Setting a hidden variable will help avoiding a loop of
//postback triggered from client side script.
hdnLoaded.Value = "true";
divLoading.Visible = false; // Make the loading message invisible
}
就这样。我花了一段时间才找到我需要这种东西的帮助。所以这里有一个给其他人。希望这能帮助到某人。
这是我在 The Code Project 上的第一篇文章。欢迎提出任何改进意见。
历史
- 2009 年 2 月 24 日:初始发布