ICallback 和基于 JSON 的 JavaScript 序列化






3.86/5 (3投票s)
Callback是一种轻量级技术,用于从JavaScript异步调用服务器端方法,无需任何回发以及页面不必要部分的重新加载/渲染和不必要的代码。
引言
在使用ASP.NET时,有时我们需要异步调用服务器端方法,而无需回发,无论是完整页面回发还是部分页面回发。感谢ASP.NET团队提供了ICALLBACK
的实现。
ICALLBACK
ICALLBACK
是一个轻量级过程。它在内部使用众所周知的XMLHTTP对象来调用服务器端方法,它不会导致页面回发,因此不会导致页面渲染,因此我们在客户端显示输出。我们需要自己生成HTML输出并手动渲染控件。
ICALLBACKEVENTHANDLER
ICALLBACK
通过使用ICALLBACKEVENTHANDLER
接口在ASP.NET中实现,它有两个方法:其中一个用于从JavaScript(客户端代码)调用,另一个将结果异步返回到JavaScript函数。
我们只需要在服务器端使用服务器端代码执行一些操作并返回结果,但结果可以是任何类的实例或对象,JavaScript代码可能不容易处理,因此我们在这里首选JSON,它代表JavaScript对象表示法。
JSON
JSON是一种轻量级的数据交换格式。ASP.NET也对JSON提供了良好的支持。它正在迅速被采用,因为它轻量级且易于人类和机器阅读。
Callback服务器端代码
让我们首先逐步实现ICALLBACKEVENTHANDLER
来异步调用服务器端方法
使用System.Web.UI.ICallbackEventHandler
实现服务器端 (C#) 页面/控件类。以下是需要实现的两个方法的定义
RaiseCallbackEvent
方法通过JavaScript函数调用
public void RaiseCallbackEvent(string eventArgument)
{
//to do code here
}
GetCallbackResult
方法在RaiseCallbackEvent
方法的处理完成后自行调用
public string GetCallbackResult()
{
return "";
}
在Page_Load
或Page_Init
事件中,使用以下语句来注册客户端方法。
CallServer(arg, context)
,顾名思义,用于调用/引发服务器端方法RaiseCallbackEvent string eventArgument)
。
ReceiveServerData(arg, context)
用于通过GetCallbackResult()
的arg
参数获取结果。
protected void Page_Load(object sender, EventArgs e)
{
ClientScriptManager scriptMgr = Page.ClientScript;
String cbReference =
scriptMgr.GetCallbackEventReference(this, "arg", "ReceiveServerData", "");
String callbackScript =
"function CallServer(arg, context) {" + cbReference + "; }";
cm.RegisterClientScriptBlock(this.GetType(),
"CallServer", callbackScript, true);
}
Callback客户端代码
<script language=javascript type=text/javascript>
function ReceiveServerData(arg, context)
{
alert(arg);
}
function CallSrv()
{
CallServer('get customer', '');
}
</script>
<input type=”button” value=”get customer” onclick=”CallSrv()” />
就是这样。这些是您需要使用ICALLBACK
调用服务器端代码并获取结果的步骤。
现在我们将看到一些非常简单的步骤,用于基于JSON的JavaScript序列化,以易于解析的格式将结果返回给JavaScript。
假设我们有以下类,我们需要通过JavaScript序列化将其对象返回给JavaScript函数。
示例类
public class Customer
{
public string Name;
public int Age;
}
JSON代码
在类级别声明字符串jsonResult
,它将用于包含返回的最终结果。
两种方法中的示例代码如下所示
public void RaiseCallbackEvent(string eventArgument)
{
//populate Customer object to return
Customer customer = new Customer();
customer.Name = "Muhammad Adnan";
customer.Age = 24;
//javascript serialization of Customer object
System.Web.Script.Serialization.JavaScriptSerializer jss;
jss = new System.Web.Script.Serialization.JavaScriptSerializer();
//stringbuilder to contain serialized customer object
System.Text.StringBuilder sbCustomer = new System.Text.StringBuilder();
jss.Serialize(customer, sbCustomer);
jsonResult = sbCustomer.ToString();
}
public string GetCallbackResult()
{
return jsonResult;
}
异步输出将在毫秒内可用,且无需回发。
结论
Callback是一种轻量级技术,用于从JavaScript异步调用服务器端方法,无需任何回发以及页面不必要部分的重新加载/渲染和不必要的代码。
JSON是一种轻量级数据交换格式,使服务器端类对象可以被客户端代码轻松解析,以在浏览器上显示输出。