首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> ASP.NET教程
WEB应用程序中的进度条-.NET教程,Web Service开发
作者:网友供稿 点击:77
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
web应用程序中的进度条

julien cheyssial 写作于2003/10/01

joise.li翻译并修改于2004-4-2



写在前面:

原文是我在需要使用进度条时找到的一篇文章,讲解详细并附有实例。我在原文的基础上加上了自己的修改:增加了线程处理并且将进度条的使用放到了子线程中处理。这是我第一次翻译文章,敬请各位指正。原文见于http://www.myblogroll.com/articles/progressbar/,请对照参考。





谁说在web应用程序中不能使用进度条?我认为能。本文将介绍在服务端长时间的处理过程中通过使用进度条提高web应用程序的质量和界面友好度。事实上,如果一个web应用程序一直运行在无状态和无连接状态下,用户很容易认为事情已经结束了。但是本文介绍的不使用任何activex控件和乱七八糟的java applets的进度条将有助于改善这点。



在一个web应用程序中能够使用进度条的关键是浏览器有能力在所有页面加载完之前显示页面。我们将使用这点特性来有步骤的生成并且发送页面给客户端。首先,我们将使用html生成一个完美并且漂亮的进度条,然后我们动态的发送javascript块以更新进度条。当然,以上的所有内容都是在断开用户请求之前实现的。在c#中,response.write允许我们加入自定义内容到缓存区并且response.fluse()允许我们把所有缓存区中的内容发送到用户的浏览器上。



第一步:

第一步让我们来建立一个进度条页面,我们使用progressbar.aspx。如上所述,我们逐步生成并发送页面到客户端。首先,我们将使用html生成一个完美并且漂亮的进度条。所需要的html代码我们可以从事先定义的progressbar.htm中获取,所以,第一件事情是装载它并且将数据流发送到客户端的浏览器,在progressbar.aspx的page_load中加入如下几行:

string strfilename = path.combine( server.mappath("./include"), "progressbar.htm" );

streamreader sr = new streamreader( strfilename, system.text.encoding.default );

string strhtml = sr.readtoend();

response.write( strhtml );

sr.close();

response.flush();

以下是progressbar.htm的html代码,(译注:作者把脚本函数放在了另外一个js文件中,但我嫌麻烦就也放在了这个静态页面中了)

<script language="javascript">

function setpgb(pgbid, pgbvalue)

{

if ( pgbvalue <= 100 )

{

if (lblobj = document.getelementbyid(pgbid+_label))

{

lblobj.innerhtml = pgbvalue + %; // change the label value

}



if ( pgbobj = document.getelementbyid(pgbid) )

{

var divchild = pgbobj.children[0];

pgbobj.children[0].style.width = pgbvalue + "%";

}

window.status = "数据读取" + pgbvalue + "%,请稍候...";

}



if ( pgbvalue == 100 )

window.status = "数据读取已经完成";



}

</script>

<html>

<head>

<link rel="stylesheet" type="text/css" href="style/common.css" />

</head>

<body bgcolor="buttonface" topmargin="0" leftmargin="0">

<table width="100%" height="100%" id="table1">

<tr>

<td align="center" valign="middle">

<div class="bi-loading-status" id="probar" style="display: ; left: 425px; top: 278px">

<div class="text" id="pgbmain_label" align="left"></div>

<div class="progress-bar" id="pgbmain" align="left">

<div style="width:10%"></div>

</div>

</div>

</td>

</tr>

</table>

</body>

</html>

对应的css定义如下:

.bi-loading-status {

/*position: absolute;*/

width: 150px;

padding: 1px;

overflow: hidden;

}



.bi-loading-status .text {

white-space: nowrap;

overflow: hidden;

width: 100%;

text-overflow: ellipsis;

padding: 1px;

}



.bi-loading-status .progress-bar {

border: 1px solid threedshadow;

background: window;

height: 10px;

width: 100%;

padding: 1px;

overflow: hidden;



}



.bi-loading-status .progress-bar div {

background: highlight;

overflow: hidden;

height: 100%;

filter: alpha(opacity=0, finishopacity=100, style=1, startx=0, starty=0, finishx=100, finishy=0);

}

第二步:

现在我们可以开始更新进度条了,这是十分重要的部分,因为这部分可以令你的进度条活起来。(译注,原来是使用随机的增加15次直到加载完毕,本文仅使用从1-100的匀速增加,以下内容非译)

首先我们新开一个线程,在page_load 中加入以下代码:

thread thread = new thread( new threadstart(threadproc) );

thread.start();

thread.join();

在类中增加以下函数:

private void threadproc()

{

string strscript = "<script>setpgb(pgbmain,{0});</script>";

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

{

system.threading.thread.sleep(10);

response.write( string.format( strscript, i ) );

response.flush();

}

}

注意,在以上代码中我们使用for循环,在i每增加一次的情况下往客户端发送一段脚本<script>setpgb(pgbmain,{0});</script>,其中的{0}会被相应的i替换,而该段脚本会调用预先写好的javascript函数setpgb,更改页面的进度条状态。




文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·ASP.NET三层架构示例(中文版)-.NET教程,面向对象编程
·C#自定义控件制作篇-.NET教程,C#语言
·asp.net上传图片时,产生预览
·关于DataGrid 数据导入Excel乱码-ASP教程,数据库相关
·ado.net中数据库连接方式
·用asp.net(c#)连接oracle数据库的方法
·网页制作小技巧-ASP教程,ASP应用
·动态改变asp.net网页的标题
·asp.net中利用cookies保持客户端信息
·关于C#中switch语句的一点注意-.NET教程,C#语言
最新文章
·用vb.net 2005编写定时关机程序_vb/vb.net教程
·vb.net实现窗体图标最小化到状态栏_vb/vb.net教程
·如何提高google adsense单价:渠道篇_网赚技巧
·做百度主题推广的经验谈_网赚技巧
·解读电子商务规划关键词_站长心得
·手把手教你建立自己的网站_站长心得
·学网页设计与网页制作,你该做些什么?_站长心得
·写给新人的google排名知识_google推广
·google网络推广adwords帐户申请解析_google推广
·如何合理提高google adsense的收入_google推广
相关主题
  • web应用程序asp.net开发电子商务网站购物车_asp.net技巧
  • WEB应用的缓存兼容性设计-.NET教程,Web Service开发
  • Web应用导出Excel报表的简单实现(HTML)-JSP教程,Java技巧及代码
  • web应用分页技术-JSP教程,资料/其它
  • WEB应用中报表打印的实现-ASP教程,打印相关
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭