首页 新闻 搜索 专区 学院

请问ASP.net怎么即使输出!

0
悬赏园豆:10 [已关闭问题]

比如我用一个循环语句输出100条记录,然后用一个Lable显示,我想要的效果就是循环了一条就显示一条,循环两天就显示两条,不要循环完一次加载出来。

再如,我做一个动态生成静态页面的功能,当生成一个静态页面,就提示一下生成成功,不要全部生成完才显示出来,如果数据量大,会让人感觉页面卡死一样。

 

请问应该怎么做才能实现我想要的这种效果!!!

暮光青年的主页 暮光青年 | 初学一级 | 园豆:2
提问于:2010-02-23 18:51
< >
分享
其他回答(5)
0

采用Ajax,或者在你的Label外面加一个UpdatePanel进行异步加载

查尔斯 | 园豆:3832 (老鸟四级) | 2010-02-23 18:53
参考http://www.jb51.net/article/18176.htm
支持(0) 反对(0) 查尔斯 | 园豆:3832 (老鸟四级) | 2010-02-23 20:25
0

ajax异步,使用一个timer

天堂口 | 园豆:514 (小虾三级) | 2010-02-23 20:37
0

大概思路与伪代码:

=========================

页面A:  1 :先新建一个线程,来做以下事情——

int count = 所有待运行的项目数;

Session["总数"] = count;

for (int i=0;i<count;i++)

{

   //DoSomething;

   Session["当前序数"] = i;

}

2 : 当前线程输出已设计好的一段HTML,它包含一个计时器,一段获得页面B数据的ajax代码与和以此为基础定时重绘的进度条。

=========================

页面B:Json或xml格式,写入Session["总数"],Session["当前序数"]

 

写的不好,大概是这个意思。

vons | 园豆:1033 (小虾三级) | 2010-02-23 23:45
0

通过ajax的异步加载应该能够实现。

langford | 园豆:710 (小虾三级) | 2010-02-27 01:03
0

原则上来说Asp.NET程序是不能做到这样子输出的,或者说B/S程序都无法做到这一点吧。就按照你的来说,在一个for循环中,i增加一次页面就要显示一次,这可以说即使你做winform程序,也基本是需要借助其他方式来实现的。这里就会存在一个线程阻塞问题,程序运行到i标量增加后就需要挂起当前线程,然后输出结果到客户端,客户端响应后再继续循环,这是你想要的结果,问题是web程序是单线程的,所以当变量增加时挂起当前线程,输出也就挂起了。

所以要实现这个功能的话,建议两种方式,客户端使用javascript来模拟一下这个过程,做一个假性的显示告诉用户当前进度,然后再做一个ajax取服务器端操作状态,如果服务器端操作完成了,javascript模拟也可以结束了。

其次使用ajax来请求,服务器端变量增加一次,你可以记录一个标示到某个文件中,然后ajax进行快速刷新时去读取该文件标示,从而显示结果到客户端。不过这样子读出来的结果也应该是很快的,如果你测试的话,可以在服务器端加个Sleep线挂起当前线程一段时间,然后可以看到这样子的效果。

西越泽 | 园豆:10713 (专家六级) | 2010-02-27 11:55
0

不是不可以,不过做成你这种效果,估计会对服务器造成很大的压力。

首先进行一次查询:利用ajax获取待显示的记录数,例如获取到的记录数为100,也可能为99...

然后,进行100次循环,每次循环采取ajax读取一条记录(查询条件和获取显示记录数一样,不同的是,分页条件不一样,你需要将当前的页数传到后台),然后利用js将获取到的数据append到你的网页中去。

值得注意的是:如果用一般的循环,可能会遇到意想不到的结果。我们知道ajax是异步的,那么,第一次循环后,并不会等待第一次查询结束以后在进行第二次循环,也许在一秒之内js就进行了100次的循环。然而由于网络传输的问题,也许第3条数据会比第二条数据先传回到客户端。

就是说,如果想保证第三条数据显示在第二条数据之后,就必须在第二条数据成功获取并加载到网页中后,才去进行下一次循环。可以采取如下的方式:

function getData(currentIndex){

     jQuery.ajax({

       ...

       success: function(msg){            

           //这里将msg内容append到网页中去

           //下面进行下一次提取数据

          i++;

          getData(i);

          }

    });

}

 

这里只是给一个思路,具体的内容就由你自己去完成吧

东国先生 | 园豆:225 (菜鸟二级) | 2010-02-28 16:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册