我现在有个库 比较大 查询数据 可能需要10秒左右 ,懂行的人知道打开网页知道看IE下面的进度条 不懂行的用户就以为死机了或者是没反应还不停的去点按钮 我想做个提示页面 点击查询的时候 出来一个等待页面 直到结果给出 。
那个等待页面不需要进度的。所以说应该不复杂 可是我是新手不知道从何入手 希望高手们 给点意见或者是源码 让我学习~谢谢~~~
那个等待页面不需要进度的。所以说应该不复杂 可是我是新手不知道从何入手 希望高手们 给点意见或者是源码 让我学习~谢谢~~~
调试欢乐多
• 开始加载反馈页面后,再重定向到工作页面。这种情况下,重定向是由页面的 onload Javascript 事件中的脚本完成的。浏览器加载并显示反馈页面,然后指向工作页面。页面开始执行冗长的任务,同时为用户显示反馈页面。
• 根据需要,反馈页面可以很复杂并包括许多 UI 元素。它可以包含“请稍候...”消息或显示动画 GIF,或者借助某些动态 HTML 功能,显示某些看起来像是一个真正进度栏的内容。
我特意创建了一个 LengthyAction 类来帮助管理冗长任务的开始。private const string UrlFormatString = "{0}?target={1}";
public static void Start(string feedbackPageUrl,
string targetPageUrl)
{
// 准备反馈页面的 URL
string url = String.Format(UrlFormatString,
feedbackPageUrl, targetPageUrl);// 将调用重定向到反馈页面
HttpContext.Current.Response.Redirect(url);
}该类的特点是只有一个静态方法,即 Start。Start 方法获取反馈页面和目标页面(即执行任务的页面)的 URL。该方法将两个参数合并成一个 URL 并进行重定向。反馈页面可以包含您希望的任何用户界面,但必须满足几个关键的要求。该页面必须能够检索工作页面的名称,并提供一个可能的自动机制,以便通过脚本重定向到工作页面。我定义了一个自定义的基础 Page 类,并将这些功能内置在该类中。这样做时,我必须进行一些假定。特别是,我的实现假定工作页面的名称使用大家熟知的属性名称 target 通过查询字符串进行传递。目标页面的名称存储在名为 TargetURL 的公共属性中。此外,反馈页面提供名为 GetAutoRedirectScript 的函数。此函数的目的是返回通过脚本实现重定向所需的脚本代码。public string GetAutoRedirectScript() {
return String.Format("location.href='{0}';", TargetUrl);
}为了使问题尽可能地简单,FeedbackBasePage 类还查找名为 Body 的通用 HTML 控件。这与您从以下标记中获取的完全一样。<body runat="server" id="Body"> 如果可以通过简单的方法为页面的正文标记编程,FeedbackBasePage 类将找到这种方法并自动添加 onload 属性;否则,您必须手动添加 onload 属性。要使反馈页面正常工作,此属性是必需的。HtmlGenericControl body = FindControl(BodyId) as HtmlGenericControl;
if (body != null)
body.Attributes["onload"] = GetAutoRedirectScript();最后提供给浏览器的标记代码如下所示。<body onload="location.href='lengthyop.aspx'">让我们看看使用本文中讨论的类实现冗长操作需要执行哪些步骤。首先引用所需的程序集,然后为触发操作的单击按钮编写以下事件处理程序。void ButtonLengthyOp_Click(object sender, EventArgs e) {
LengthyAction.Start("feedback.aspx", "work.aspx");
}接下来,在项目中添加反馈页面。这是一个常规 Web 窗体页,您可以按照上文所述修改其 <body> 标记,并将基础类更改为 FeedbackBasePage。在您单击按钮开始进程之后以及显示结果之前,将显示反馈页面的用户界面,如下图所示。图 2:冗长操作的顺序
在本例中,我使用了一种跨页回发,这对特别冗长的操作来说是一种更普遍的方案。但是,这引发了传递视图状态以及工作页面完成其任务通常所需的参数的问题。您可以使用工作页面的查询字符串将序列化的对象版本连接起来,或者将所有内容都存储在 ASP.NET 缓存或 Session 对象中。这种情况下不能使用 HTTP 上下文,因为该操作涉及多个 HTTP 请求,每个请求都有一个不同的项目集。请注意,反馈页面的 URL 包含调用的某些细节,并且可能如下所示。feedback.aspx?target=work.aspx?param1=123¶m2=hello要隐藏这些细节,您可以定义一个自定义 HTTP 处理程序,并将其绑定到您认为更合适的虚拟 URL。该 HTTP 处理程序可以从缓存或会话状态中检索所需的信息(包括反馈页面和工作页面的名称)。
有些复杂