asp.net2.0中使用Callback进行异步处理
2007-11-13 11:07
375 查看
要使用Callback技术,首先必须实现ICallbackEventHandler接口中的两个方法:
RaiseCallbackEvent(string eventArgument):负责接收客户端js所传入的参数。
GetCallbackResult():将处理结果回传给客户端js。
还要借助Page.ClientScript.GetCallbackEventReference方法让服务器端获得客户端js的引用
Page.ClientScript.GetCallbackEventReference:获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。
例子
客户端:
<body>
<form id="form1" runat="server">
<div>
输入au_lname:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
返回au_fname:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="确定" /><br />
</div>
</form>
</body>
</html>
<script language="javascript" type="text/javascript">
function Result(fname,context) // 接受服务器端处理函数的结果
{
document.getElementById(context.id).value = fname; //context就是服务器端注册的回调函数中的TextBox2.ClientID
}
</script>
服务器端:
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.Data.SqlClient;
public partial class _Default : System.Web.UI.Page , ICallbackEventHandler
{
string au_fname = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.Button1.Attributes.Add("onclick", Page.ClientScript.GetCallbackEventReference(this, "document.getElementById('TextBox1').value", "Result",TextBox2.ClientID) + ";return false;");
}
}
#region ICallbackEventHandler 成员
public string GetCallbackResult() //返回结果给前端js
{
return this.au_fname;
}
public void RaiseCallbackEvent(string eventArgument) //接受前端js传递的参数进行处理
{
string sql = "select au_fname from authors where au_lname = '" + eventArgument + "'";
SqlDataAdapter da = new SqlDataAdapter(sql, Conn());
DataSet ds = new DataSet();
da.Fill(ds);
au_fname = ds.Tables[0].Rows[0]["au_fname"].ToString();
}
#endregion
public string Conn() //数据库连接字符串
{
return "server=localhost;database=pubs;user=sa;pwd=sa";
}
}
重要说明:GetCallbackEventReference方法的第四个参数“Context”非常重要,从服务器端注册的回调函 数可以看出,传递的Context参数是TextBox2的客户端id,而客户端Result函数中的参数Context就是TextBox2的客户端 id,我们可以对Context参数任意赋值,Context参数总会会被传递给本地端处理回调返回结果的函数中,这样我们就可以十分灵活的操作返回结果 了
RaiseCallbackEvent(string eventArgument):负责接收客户端js所传入的参数。
GetCallbackResult():将处理结果回传给客户端js。
还要借助Page.ClientScript.GetCallbackEventReference方法让服务器端获得客户端js的引用
Page.ClientScript.GetCallbackEventReference:获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。
public string GetCallbackEventReference ( string target, string argument, string clientCallback, string context, string clientErrorCallback, bool useAsync )
control 处理客户端回调的服务器 Control。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。
argument 从客户端脚本传递给服务器端的一个参数
clientCallback 一个客户端事件处理程序的名称,该处理程序接收成功的服务器端事件的结果。
context 启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。
clientErrorCallback 客户端事件处理程序的名称,该处理程序在服务器端事件处理程序出现错误时接收结果。
useAsync true 表示同步执行回调;false 表示异步执行回调。
返回值 调用客户端回调的客户端函数的名称。
例子
客户端:
<body>
<form id="form1" runat="server">
<div>
输入au_lname:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
返回au_fname:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="确定" /><br />
</div>
</form>
</body>
</html>
<script language="javascript" type="text/javascript">
function Result(fname,context) // 接受服务器端处理函数的结果
{
document.getElementById(context.id).value = fname; //context就是服务器端注册的回调函数中的TextBox2.ClientID
}
</script>
服务器端:
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.Data.SqlClient;
public partial class _Default : System.Web.UI.Page , ICallbackEventHandler
{
string au_fname = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.Button1.Attributes.Add("onclick", Page.ClientScript.GetCallbackEventReference(this, "document.getElementById('TextBox1').value", "Result",TextBox2.ClientID) + ";return false;");
}
}
#region ICallbackEventHandler 成员
public string GetCallbackResult() //返回结果给前端js
{
return this.au_fname;
}
public void RaiseCallbackEvent(string eventArgument) //接受前端js传递的参数进行处理
{
string sql = "select au_fname from authors where au_lname = '" + eventArgument + "'";
SqlDataAdapter da = new SqlDataAdapter(sql, Conn());
DataSet ds = new DataSet();
da.Fill(ds);
au_fname = ds.Tables[0].Rows[0]["au_fname"].ToString();
}
#endregion
public string Conn() //数据库连接字符串
{
return "server=localhost;database=pubs;user=sa;pwd=sa";
}
}
重要说明:GetCallbackEventReference方法的第四个参数“Context”非常重要,从服务器端注册的回调函 数可以看出,传递的Context参数是TextBox2的客户端id,而客户端Result函数中的参数Context就是TextBox2的客户端 id,我们可以对Context参数任意赋值,Context参数总会会被传递给本地端处理回调返回结果的函数中,这样我们就可以十分灵活的操作返回结果 了
相关文章推荐
- spring中使用@Async注解进行异步处理
- "现在已经正在使用此 SocketAsyncEventArgs 实例进行异步套接字操作"的处理
- 使用AsyncCallback处理异步调用
- spring中使用@Async注解进行异步处理
- Android 中 Handler 引起的内存泄露 在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用。其实这可能导致内存泄露,代码中哪里可能导致内存泄露,又是如何
- 微信小程序中使用Promise进行异步流程处理
- 前端使用ajax进行异步处理时的跨域问题
- 使用BackgroundWorker控件进行异步处理
- jQuery.post( url, [data], [callback], [type] ) : 使用POST方式来进行异步请求
- 使用Sharepreference+Thread+Handler进行异步处理实现倒计时功能
- 微信小程序中使用Promise进行异步流程处理的实例详解
- 使用 AsyncCallback 处理异步调用
- 机器学习(八)使用sklearn库进行数据分析_——特征处理之过滤、包裹、嵌入型
- 机器学习(九)使用sklearn库进行数据分析_——文本特征处理
- 使用Delayed job处理Rails中的异步任务
- 使用AngularJS对路由进行安全性处理的方法
- Android性能优化之使用线程池处理异步任务
- 在后端是PHP程序的情况下,保持前端Javascript和PHP之间传值的统一编码可以使用以下函数进行处理:
- 使用JavaScript进行基本图形操作与处理