前言

最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能。
通过线程执行导入,并把正在执行的状态存入session,既共享执行状态,通过ajax调用session里的执行状态,从而实现反馈导入状态的功能!
上代码: 前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>批量导入数据</title>
<style type="text/css">
.pop_body_con { width: 310px; position: fixed; top: 50%; left: 50%; margin-left: -150px; background: #eee; display:none; }
.pop_body_con .pop_head { width: auto; padding: 10px 0; background: #fff; }
.pop_body_con .pop_head a { display: block; color: #717274; font-size: 12px; text-decoration: none; text-align: center; }
.pop_box { width: auto; overflow: hidden; padding: 45px 10px; }
.pop_box .pop_text { float: left; }
.pop_box .pop_text p { padding: 0; margin: 0; font-size: 12px; line-height: 18px; color: #717274;}
.pop_box .progress_bar_con { float: left; width: 220px; position: relative; z-index: 2; }
.pop_box .progress_bar_con p { margin: 0; padding: 0; font-size: 12px; color: #fff; line-height: 18px; width: 100%;
text-align: center; position: absolute; left: 0; top: 0; z-index: 4; }
.pop_box .progress_bar_con .progress_bar_start { width: 100%; height: 18px; background: #C4C0C0; }
.pop_box .progress_bar_con .progress_bar_end { width: 16%; height: 18px; background: #2bd35d; position: absolute; left: 0; top: 0; z-index: 3; }
.pop_box .progress_bar_con { float: left; }
#loading-mask { width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; z-index: 0; background-color: rgba(0, 0, 0, 0.34902); display: none; }
</style>
<script src="ajax-master/jquery.js"></script>
<script>
var MyInterval;
$(function () {
$("#startImport").click(function () {
MyInterval = setInterval(getState, 1000);
});
});
function getState() {
$.ajax({
url: "test.aspx",
type: "Post",
data: { action: "getSession" },
success: function (msg) {
if (msg != "null") {
msg = eval('(' + msg + ')');
if (msg.being == 100) {
setProcessBar(1, 1);
$(".pop_body_con").hide();
$("#loading-mask").hide();
clearInterval(MyInterval);
}
else {
$(".pop_body_con").show();
$("#loading-mask").show();
setProcessBar(msg.being, msg.count)
}
}
}
});
}
function setProcessBar(exeFlag, exeMax) {
$("#progressbar_text").html(parseInt(roundFun(exeFlag / exeMax, 2) * 100) + "%");
$("#progressbar_bar").attr("style", "width:" + parseInt(roundFun(exeFlag / exeMax, 2) * 100) + "%;");
}
function roundFun(number, X) {
X = (!X ? 2 : X);
return Math.round(number * Math.pow(10, X)) / Math.pow(10, X);
}
</script>
</head>
<body style="background-color: #fff;">
<input id="startImport" type="button" value="导入数据" />
<div id="loading-mask" ></div>
<div class="pop_body_con">
<div class="pop_head">
<a href="javascript:;">正在导入…请勿操作!</a>
</div>
<div class="pop_box">
<div class="pop_text">
<p>导入进度:</p>
</div>
<div class="progress_bar_con">
<p id="progressbar_text">0%</p>
<div class="progress_bar_start"></div>
<div class="progress_bar_end" id="progressbar_bar"></div>
</div>
</div>
</div>
</body>
</html>
后台页面:
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Script.Serialization;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string action = Request.Form["action"];
if (!string.IsNullOrEmpty(action))
{
Hashtable temp = tmethod();
if (temp == null)
{
Thread trd = new Thread(new ParameterizedThreadStart(insertData));
trd.Start(action);
}
else
{
if (temp["reCode"].ToString() == "100")
{
Session.Remove("process");
}
}
JavaScriptSerializer ser = new JavaScriptSerializer();
String jsonStr = ser.Serialize(temp);
Response.Write(jsonStr);
Response.End();
}
}
public Hashtable tmethod()
{
return (Hashtable)Session["process"];
}
private void insertData(object obj)
{
string action = obj.ToString();
int tCount = 100;
for (int i = 0; i < tCount; i++)
{
Hashtable stateHash = setStateVal(0, i, tCount, action);
Session["process"] = stateHash; //存入session,方便共享执行状态
Thread.Sleep(500);
}
Session["process"] = setStateVal(100, tCount, tCount, action);
Thread.CurrentThread.Abort();
}
private Hashtable setStateVal(int code, int beingV, int CountV, string action)
{
Hashtable stateHash = new Hashtable();
stateHash["reCode"] = code; //返回状态值
stateHash["being"] = beingV; //正在执行值
stateHash["count"] = CountV; //总值
stateHash["action"] = action; //总值
return stateHash;
}
}
ok,共享完毕!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# asp.net
# 批量导入
# asp.net批量添加数据
# ajax获取状态码
# C#.NET中如何批量插入大量数据到数据库中
# Asp.Net使用Bulk实现批量插入数据
# C#/.Net 中快速批量给SQLite数据库插入测试数据
# asp.net新闻列表生成静态页之批量和单页生成
# 在ASP.NET 2.0中操作数据之六十二:GridView批量更新数据
# 在ASP.NET 2.0中操作数据之六十四:GridView批量添加数据
# 在ASP.NET 2.0中操作数据之三十七:DataList批量更新
# ajax readyState的五种状态详解
# AJAX(XMLHttpRequest.status)状态码
# javascript学习笔记(七)Ajax和Http状态码
# 让人
# 看了
# 长时间
# 很容易
# 写了
# 这篇文章
# 并把
# 有疑问
# line
# float
# pop_text
# height
# relative
# progress_bar_con
# index
# hidden
# size
# font
# block
# pop_box
相关文章:
装修招标网站设计制作流程,装修招标流程?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
盘锦网站制作公司,盘锦大洼有多少5G网站?
h5在线制作网站电脑版下载,h5网页制作软件?
香港网站服务器数量如何影响SEO优化效果?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
在线制作视频网站免费,都有哪些好的动漫网站?
建站之星与建站宝盒如何选择最佳方案?
如何在Ubuntu系统下快速搭建WordPress个人网站?
建站之星伪静态规则如何设置?
,交易猫的商品怎么发布到网站上去?
如何选择美橙互联多站合一建站方案?
python的本地网站制作,如何创建本地站点?
教程网站设计制作软件,怎么创建自己的一个网站?
郑州企业网站制作公司,郑州招聘网站有哪些?
怎么将XML数据可视化 D3.js加载XML
建站之星如何优化SEO以实现高效排名?
制作农业网站的软件,比较好的农业网站推荐一下?
建站为何优先选择香港服务器?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
宁波自助建站系统如何快速打造专业企业网站?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
制作门户网站的参考文献在哪,小说网站怎么建立?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
网站制作话术技巧,网站推广做的好怎么话术?
网站制作公司,橙子建站是合法的吗?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
大学网站设计制作软件有哪些,如何将网站制作成自己app?
西安大型网站制作公司,西安招聘网站最好的是哪个?
如何在Windows虚拟主机上快速搭建网站?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何快速搭建自助建站会员专属系统?
广东企业建站网站优化与SEO营销核心策略指南
建站之星代理费用多少?最新价格详情介绍
如何选择服务器才能高效搭建专属网站?
制作网站公司那家好,网络公司是做什么的?
如何通过VPS建站实现广告与增值服务盈利?
,巨量百应是干嘛的?
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何通过老薛主机一键快速建站?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何在IIS7上新建站点并设置安全权限?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
行程制作网站有哪些,第三方机票电子行程单怎么开?
如何彻底卸载建站之星软件?
如何在七牛云存储上搭建网站并设置自定义域名?
如何通过.red域名打造高辨识度品牌网站?
股票网站制作软件,网上股票怎么开户?
网站制作的步骤包括,正确网址格式怎么写?
*请认真填写需求信息,我们会在24小时内与您取得联系。