前台用ajax不停进行查询,直到任务完成。进度条用的是jquery-ui。后台用一般处理程序处理相应,进度信息保存在HttpContext.Application中。

  代码作为简单示例,实际应用时应对资源释放、防止多线程混乱等做进一步控制。

  • 效果图:

  

  • 代码:

前台:

 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="Scripts/jquery-2.1.4.min.js"></script>
<script src="Scripts/jquery-ui-1.11.4.min.js"></script>
<link href="Content/themes/base/all.css" rel="stylesheet" />
<script type="text/javascript">
function GetProgress() {
$.ajax({
url: "/Handler1.ashx",
type: "POST",
data: { "RequestType": "AjaxRequest", "Method": "GetProgress" },
success: function (data) {
if (data != -1) {
//工作没有结束,继续查询进度
setTimeout(GetProgress, 100);
$("#progress").html(data);
$("#progressbar").progressbar({ value: parseInt(data) });
} else {
//工作完成
$("#progress").html("done");
$("#progressbar").progressbar({ value: 100 });
$("#btn1").attr("disabled", false);
}
}
});
} function DoWork() {
//禁用按钮
$("#btn1").attr("disabled", true);
$.ajax({
url: "/Handler1.ashx",
type: "POST",
data: { "RequestType": "AjaxRequest", "Method": "DoWork" }
});
//开始查询进度
setTimeout(GetProgress, 500);
}
</script> </head>
<body>
<div>
<input type="button" id="btn1" value="开始" onclick="DoWork();" />
<label id="progress"></label>
<div id="progressbar"></div>
</div>
</body>
</html>

后台:

 // 2015年12月16日 09:53:11
// David Huang
// 进度条示例
namespace ProgressTest
{
using System;
using System.Threading;
using System.Web; /// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
// context
private HttpContext context; public bool IsReusable
{
get
{
return false;
}
} public void ProcessRequest(HttpContext context)
{
this.context = context;
if (context.Request["RequestType"] == "AjaxRequest")
{
if (context.Request["Method"] == "GetProgress")
{
context.Response.Clear();
context.Response.Write(this.GetProgress());
context.Response.End();
}
else
{
this.DoWork();
}
}
} /// <summary>
/// 开始工作
/// </summary>
private void DoWork()
{
for (int i = ; i < ; i++)
{
// 记录进度
// 实际应用中需要进一步控制(利用用户信息、cookies等),防止并发造成混乱
this.context.Application["progress"] = i + ;
Random r = new Random();
Thread.Sleep(r.Next(, ));
}
// 完成后释放资源
this.context.Application["progress"] = null;
} /// <summary>
/// 查询进度
/// </summary>
/// <returns>进度</returns>
private int GetProgress()
{
if (this.context.Application["progress"] != null)
{
return (int)this.context.Application["progress"];
}
else
{
return -;
}
}
}
}

asp.net利用ajax和jquery-ui实现进度条的更多相关文章

  1. asp.net利用Ajax和Jquery在前台向后台传参数并返回值

    1----------前台 首先需要 Jquer的包 <script src="js/jquery-1.9.1.js" type="text/javascript& ...

  2. 利用js和JQuery定义一个导航条菜单

    利用js和JQuery定义一个导航条 效果: 一.html代码: <div class="Maintenance"> <div class="Title ...

  3. ajax大数据排队导出+进度条

    描述 :我们现在有很多数据,分表存放,现在需要有精度条的导出.最后面有完整源码. 效果图:

  4. ASP.NET Jquery+ajax上传文件(带进度条)

    效果图 支持ie6+,chrome,ie6中文文件名会显示乱码. 上传时候会显示进度条. 需要jquery.uploadify.js插件,稍后会给出下载 前台代码 <%@ Page Langua ...

  5. asp.net 后台多线程异步处理时的 进度条实现一(Ajax+Ashx实现以及封装成控件的实现)

    (更新:有的同学说源代码不想看,说明也不想看,只想要一个demo,这边提供一下:http://url.cn/LPT50k (密码:TPHU)) 工作好长时间了,这期间许多功能也写成了不少的控件来使用, ...

  6. springMVC+ajax 文件上传 带进度条

    前端代码: <form id= "uploadForm"> <p >指定文件名: <input type="text" name= ...

  7. asp.net mvc 实现上传文件带进度条

    本文乃是博主早期写的,此种思路虽然实现了,但固然不是最好的,仅做参考学习. 可以用js onprogress .fileinput .webuploader.jq ajaxsubmit等实现 思路:a ...

  8. jQuery 实现下载进度条

    //ajax异步上传 $.ajax({ url: "${pageContext.request.contextPath }/upload", type: "POST&qu ...

  9. Asp.net mvc 大文件上传 断点续传 进度条

    概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这篇文章,此方法确实很不错,能够稳定的上传大文件,http: ...

随机推荐

  1. The type java.lang.String cannot be resolved. It is indirectly referenced from required .class files

    最近在做J2ME开发项目,配置环境一切OK,但是打开项目时某些文件提示: The type java.lang.String cannot be resolved. It is indirectly ...

  2. Guava的一些总结

    guava是java API蛋糕上的冰激凌(精华). 源码包的简单说明:  com.google.common.annotations:普通注解类型.  com.google.common.base: ...

  3. android和struts2实现android文件上传

    1.开发准备如下2个工具类 package org.lxh.util; import java.io.BufferedReader; import java.io.InputStreamReader; ...

  4. Hibernate+jxl+excel导入数据库

    在将excel中的10w行数据导入数据库中时,总发生内存溢出,一开始使用的Spring+Hibernate;不知如何使用批处理,后来只是用Hibernate,10W行数据几分钟完成, 代码如下: pu ...

  5. translate函数使用

    SQL> select data,translate(data,'0123456789','##########') as num1, replace(translate(data,'01234 ...

  6. 【POJ】2528 Mayor's posters

    离散化+线段树.数组开的不够大,wa了N多回. #include <iostream> #include <cstdio> #include <cstring> # ...

  7. 中国版 Azure 现提供 Azure Traffic Manager

    Stephen MaloneAzure网络 - DNS和 Traffic Manager高级项目经理 我们非常高兴地宣布,中国版 Azure中现已提供 Azure Traffic Manager.Az ...

  8. android日历控件(一)

    自定义日历并且具备设置今天以前的时间不可点选,以前的颜色和当前的颜色不同,以及获取两次点击日期之间间隔的天数所以说细节比较多 个人习惯,先上图 靠,笔记本不知道怎么回事,禁用到触摸板之后 再次唤醒屏幕 ...

  9. HDU-1035 Robot Motion

    http://acm.hdu.edu.cn/showproblem.php?pid=1035 Robot Motion Time Limit: 2000/1000 MS (Java/Others)   ...

  10. Selenium如何实现dropbar移动

    遇到这个拖拽的dropbar,如何实现呢,, 经过网上查找,可以用Action的方式实现或者js来控制 原理:移动按钮的同时,数字也随着变化 解决方法:1.最简单的就是直接在文本框输入相应的数字 2. ...