利用Asp.Net回调机制实现进度条
2024-07-10 13:21:08
供稿:网友
 
其效果如下:
首先,在HTML文档中加入如下代码:
<div> 
<table> 
<tr> 
<td> 
</td> 
<td> 
</td> 
<td> 
</td> 
<td> 
</td> 
<td> 
</td> 
<td> 
</td> 
<td> 
</td> 
<td> 
</td> 
<td> 
</td> 
<td> 
</td> 
</tr> 
</table> 
<asp:Label runat="server" ForeColor="Red" Text="0"></asp:Label> 
</div> 
<div> 
<input type="button" value="请求" /> 
<input type="button" value="停止" disabled="disabled" /> 
</div> 
Js部分加入如下Js代码: 
<script language="javascript" type="text/javascript"> 
var idx = 0; 
var progressTimer; 
var progressInterval = 1000; 
function Request() 
{ 
document.getElementById("btnStop").disabled = ""; 
document.getElementById("btnRequest").disabled = "disabled"; 
if(idx >= 10) 
{ 
Clear(); 
return; 
} 
var arg = idx; 
<%= ClientScript.GetCallbackEventReference(this, "arg", "GetMsgBack",null) %>; 
idx++; 
progressTimer = setTimeout('Request()',progressInterval); 
} 
function GetMsgBack(result) 
{ 
document.getElementById('progress'+idx).style.backgroundColor = 'blue'; 
var status = Number(result) * 10; 
document.getElementById("Label1").innerHTML = status + "%"; 
} 
function Stop() 
{ 
clearTimeout(progressTimer); 
Clear(); 
} 
function Clear() 
{ 
idx = 0; 
document.getElementById("btnStop").disabled = "disabled"; 
document.getElementById("btnRequest").disabled = ""; 
document.getElementById("Label1").innerHTML = "0"; 
for (var i = 1; i <= 10; i++) 
document.getElementById('progress' + i).style.backgroundColor = 'transparent'; 
} 
</script> 
css样式文件中加入如下代码: 
.statusTable 
{ 
width:100px; 
border:solid 1px #000000; 
padding-bottom:0px; 
margin-bottom:0px; 
} 
.statusTable td 
{ 
height:20px; 
} 
Asp.Net服务端实现回调代码如下: 
public partial class DigitStatus : System.Web.UI.Page, ICallbackEventHandler 
{ 
private string AspEventArgs; 
protected void Page_Load(object sender, EventArgs e) 
{ 
} 
public void RaiseCallbackEvent(string EventArgs) 
{ 
AspEventArgs = EventArgs; 
} 
public string GetCallbackResult() 
{ 
int i = Convert.ToInt32(AspEventArgs); 
i++; 
return i.ToString(); 
} 
} 
这样,一个简易的进度条就实现了,运行即可得到如页首处的效果。