现在的位置: 首页 > 综合 > 正文

使用asp.net 2.0 客户端回调功能显示后台处理进度

2013年10月03日 ⁄ 综合 ⁄ 共 4252字 ⁄ 字号 评论关闭

今天试着用.net2.0的客户端回调功能做了个后台进度显示,也可以改成进度条,进度值用session保存,主要处理过程使用线程,用FOR循环模拟,回调返回循环进度值。如图: 

 

 

Default.aspx页如下:

 

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    
<title>无标题页</title> 
    
<script type="text/javascript"> 
     
    
//获取进度值前的操作,主要是初始化进度值为0,停止标志置0,并开启后台线程处理主函数 
    function startProgress()     
    

        document.all.btnStart.disabled
=true
        document.all.lblShow.innerHTML
="准备..."
        showState(
"正在处理..."); 
        
var arg="start"
        
<%= ClientScript.GetCallbackEventReference(this"arg""showState"null)%>//不会执行showState(); 
        getProgress();  //开始获取进度值 
    }
 
     
    
//开始获取进度值 
    function getProgress() 
    

        
var arg="get"
       
<%= ClientScript.GetCallbackEventReference(this"arg""showProgress"null)%>
    }
 
     
    
//显示进度值 
    function showProgress(result) 
    

        document.all.lblShow.innerHTML
=result;   
        
if (result.substr(0,2)=="完成"
        

            showState(
"完成!"); 
            document.all.btnStart.disabled
=false
            
return
        }
 
        
else if(result.substr(0,2)=="停止"
        

            document.all.btnStart.disabled
=false
            alert(
"中断!"+result); 
            showState(
"中断!"); 
            
return
        }
 
        
else 
        

            setTimeout(
"getProgress()",1000);   //每秒获取一次当前进度 
        }
 
    }
 
     
    
//停止后台线程,显示处理结果 
    function stoptGetProgress() 
    

        
if (document.all.btnStart.disabled==falsereturn
        
var arg="stop"
        
<%= ClientScript.GetCallbackEventReference(this"arg""showState"null)%>
    }
 
     
    
//显示状态 
    function showState(result) 
    

        document.all.lblState.innerHTML
=result; 
    }
 
</script> 
</head> 
<body> 
    
<form id="form1" runat="server"> 
    
<div> 
        
<input id="btnStart" type="button" value="开始" onclick="startProgress();"/> 
        
<input id="btnStop" type="button" value="stop" oncli ck="stoptGetProgress();"/> 
         

        当前进度:[
<asp:Label ID="lblShow" runat="server" ForeColor="Red">0</asp:Label>
        共10 

        状态:[
<asp:Label ID="lblState" runat="server" ForeColor="Red"></asp:Label>
    
</div> 
    
</form> 
</body> 
</html> 

 

Default.aspx.cs代码如下:

 

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Threading; 
public partial class _Default : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler 

    
protected void Page_Load(object sender, EventArgs e) 
    

        
if (!IsPostBack)                                    //回调处理都引发Page_Load事件 
        
            Session[
"progressValue"= "0";                 //初始化进度值为0 
            Session["stopFlag"= "0";                      //停止标志,1表示停止 
        }
 
    }
 
    
客户端回调 
    
//主函数 

抱歉!评论已关闭.