Asp.net回调技术Callback学习笔记
.aspx:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>无标题页</title>
<scripttype="text/javascript">
//向服务器传递参数
functionDoSearch(){
varfirstName=document.getElementById("TextBox1").value;
CallServer(firstName,"");
}
//得到服务器的数据
functionReceiveServerData(txtUserInfo){
Results.innerHTML=txtUserInfo;
}
//设置每1秒执行一次
setInterval("DoSearch()",1000);
</script>
</head>
<body>
<formid="form1"runat="server">
<div>
姓名:<asp:TextBoxID="TextBox1"runat="server"></asp:TextBox>
<br/>
<spanid="Results"style="width:500px;"></span>
</div>
</form>
</body>
</html>
[/code]
.aspx.cs
[code]
usingSystem;
usingSystem.Collections;
usingSystem.Configuration;
usingSystem.Data;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Data.SqlClient;
publicpartialclass_Default:System.Web.UI.Page,ICallbackEventHandler
{
protectedstringtxtUserInfo;
protectedvoidPage_Load(objectsender,EventArgse)
{
//获取一个对客户端函数的引用
stringcbReference=Page.ClientScript.GetCallbackEventReference(this,"arg","ReceiveServerData","context");
//动态注册回调函数
stringcallbackScript="functionCallServer(arg,context)"+"{"+cbReference+"};";
//引发callbackScript
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallServer",callbackScript,true);
}
//引发Callback事件处理
publicvoidRaiseCallbackEvent(stringtxtFirstName)
{
if(txtFirstName!=null)
{
StringconnString=System.Configuration.ConfigurationManager.ConnectionStrings["sqlserver2008"].ToString();
SqlConnectionconn=newSqlConnection(connString);
conn.Open();
SqlCommandcomm=newSqlCommand("select*fromzzxwhere[name]=@name",conn);
comm.Parameters.Add("@name",SqlDbType.VarChar).Value=txtFirstName;
SqlDataReaderreader=comm.ExecuteReader(CommandBehavior.CloseConnection);
if(reader.Read())
{
txtUserInfo="员工编号:"+reader["id"].ToString()+"<br>";
txtUserInfo+="员工姓名:"+reader["name"].ToString()+"<br>";
txtUserInfo+="地址:"+reader["address"].ToString()+"<br>";
txtUserInfo+="服务器查询时间:"+DateTime.Now.ToString();
}
else
{
if(string.IsNullOrEmpty(txtFirstName))
{
txtUserInfo="请输入姓名";
}
else
{
txtUserInfo="查无此人";
}
}
comm.Dispose();
reader.Dispose();
conn.Dispose();
}
}
//得到回调的结果,返回给客户端
publicstringGetCallbackResult()
{
returntxtUserInfo;
}
}
简化版(偷懒一下):
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>无标题页</title>
<scripttype="text/javascript">
functionOnCallBack(txtUserInfo,context){
Results.innerHTML=txtUserInfo;
}
</script>
</head>
<body>
<formid="form1"runat="server">
<div>
姓名:<asp:TextBoxID="TextBox1"runat="server"></asp:TextBox>
<inputid="Button2"type="button"value="button"
onclick="<%=Page.ClientScript.GetCallbackEventReference(this,"document.getElementById('TextBox1').value","OnCallBack",null)%>"/>
<br/>
<spanid="Results"style="pink;width:500;"></span>
</div>
</form>
</body>
</html>
.aspx.cs
usingSystem;
usingSystem.Collections;
usingSystem.Configuration;
usingSystem.Data;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Data.SqlClient;
usingSystem.Text;
publicpartialclass_Default:System.Web.UI.Page,ICallbackEventHandler
{
protectedStringBuildertxtUserInfo;
protectedvoidPage_Load(objectsender,EventArgse)
{
}
publicstringGetCallbackResult()
{
returntxtUserInfo.ToString();
}
publicvoidRaiseCallbackEvent(stringtxtFirstName)
{
txtUserInfo=newStringBuilder();
StringconnString=ConfigurationManager.ConnectionStrings["sqlserver2008"].ToString();
SqlConnectionconn=newSqlConnection(connString);
conn.Open();
SqlCommandcomm=newSqlCommand("select*fromzzxwhere[name]=@name",conn);
comm.Parameters.Add("@name",SqlDbType.VarChar).Value=txtFirstName;
SqlDataReaderreader=comm.ExecuteReader(CommandBehavior.CloseConnection);
if(reader.Read())
{
txtUserInfo.Append("员工编号:"+reader["id"].ToString()+"<br>");
txtUserInfo.Append("员工姓名:"+reader["name"].ToString()+"<br>");
txtUserInfo.Append("地址:"+reader["address"].ToString()+"<br>");
txtUserInfo.Append("查询时间:"+DateTime.Now.ToString());
}
else
{
if(txtFirstName==string.Empty)
{
txtUserInfo.Append("请输入姓名");
}
else
{
txtUserInfo.Append("查无此人");
}
reader.Dispose();
comm.Dispose();
conn.Dispose();
}
}
}
示例3:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default3.aspx.cs"Inherits="Default3"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>无标题页</title>
<scripttype="text/javascript">
//客户端执行的方法
//下面的方法是接收并处理服务器方法返回的结果
functionSuccess(args,context){
message.innerHTML=args;
}
//下面的方式是当接收服务器方法处理的结果发生异常时调用的方法
functionError(){
message.innerHTML="发生了异常!";
}
</script>
</head>
<body>
<formid="form1"runat="server">
<div>
用户名:<inputtype="text"id="txtUserName"onblur="CallServerMethod(txtUserName.value,null)"/>
<spanid="message"></span>
<br/>
密码:<inputtype="password"size="10"maxlength="20"id="txtPwd"/>
</div>
</form>
</body>
</html>
[code]
publicpartialclassDefault3:System.Web.UI.Page,ICallbackEventHandler//实现ICallbackEventHandler接口
{
Stringresult=String.Empty;
protectedvoidPage_Load(objectsender,EventArgse)
{
//获取当前页的ClientScriptManager的引用
ClientScriptManagercsm=Page.ClientScript;
/*获取回调的引用.会在客户端生成WebForm_DoCallback方法,
*调用它来达到异步调用.这个方法是微软写的方法,会被发送
到客户端*/
/*注意这里的"Success"和Error两个字符串分别是客户端代码中
*定义的两个javascript函数*/
//下面的方法最后一个参数的意义:true表示执行异步回调,false标志执行同步回调
Stringreference=csm.GetCallbackEventReference(this,"args","Success","","Error",true);
StringcallbackScript="functionCallServerMethod(args,context){\n"+
reference+";\n}";
//向当前页面注册javascript脚本代码
csm.RegisterClientScriptBlock(this.GetType(),"CallServerMethod",callbackScript,true);
}
#regionICallbackEventHandler成员
///<summary>
///返回回调方法执行结果的方法
///</summary>
publicstringGetCallbackResult()
{
returnresult;
}
///<summary>
///在服务器端运行回调方法
///</summary>
publicvoidRaiseCallbackEvent(stringeventArgument)
{
if(eventArgument.ToLower().IndexOf("admin")!=-1)
{
result=eventArgument+"不能作为用户注册.";
}
else
{
result=eventArgument+"可以注册.";
}
}
#endregion
}