1 ArcGIS Server Web ADF 中的Ajax调用过程。
其中,客户端的WebForm_DoCallback,processCallbackResult是ADF封装好的JavaScript函数。 服务器端的类实现ICallbackEventHandler接口,实现RaiseCallbackEvent方法和GetCallbackResult方法。
>> RaiseCallbackEvent
用于处理客户端提交的请求。它接收一个string类型的参数,
格式:
{
//do something
}
>>GetCallbackResult负责把服务器的处理结果返回到客户端
格式
{
return ### //返回服务端数据
}
2 调用示例
A 在页面中的JavaScript方法中异步调用。
<%=m_ADFCallbackFunctionString%> //调用异步处理
B 服务器类中 Page_Load方法。
protected void Page_Load(object sender, EventArgs e)
{
m_ADFCallbackFunctionString = Page.ClientScript.GetCallbackEventReference(this, "message", "processCallbackResult", "context","postBackError", true);
}
GetCallbackEventReference方法参数介绍:
向服务器端发送回调节器请求的函数。语法:
Control control,
string argument
string clientCallback
string context
string clientErrorCallback
bool useAsync
)
参数
control
处理客户端回调的服务器 Control。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。
argument
从客户端脚本传递给服务器端的一个参数
clientCallback
一个客户端事件处理程序的名称,该处理程序接收成功的服务器端事件的结果。 可以是自己定义的JavaScript函数,或者ADF封装的processCallbackResult函数。
context
启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序
clientErrorCallback
客户端事件处理程序的名称,该处理程序在服务器端事件处理程序出现错误时接收结果
useAsync
true 表示同步执行回调 false 表示异步执行回调
返回值
调用客户端回调的客户端函数的名称。
C RaiseCallbackEvent根据客户端的传入的参数,进行特定的处理。
public void RaiseCallbackEvent(string eventArgs)
{
System.Collections.Specialized.NameValueCollection nameValueCollection =
ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackUtility.ParseStringIntoNameValueCollection(eventArgs);
double x = Convert.ToDouble(nameValueCollection["X"]);
double y = Convert.ToDouble(nameValueCollection["Y"]);
ESRI.ArcGIS.ADF.Web.Geometry.Point adfCenterPoint = new ESRI.ArcGIS.ADF.Web.Geometry.Point(x, y);
Map1.CenterAt(adfCenterPoint);
Map1.Zoom(20);
m_ADFCallbackFunctionString = Map1.CallbackResults.ToString();
}
D GetCallbackResult函数返回相应结果。
public string GetCallbackResult()
{
return m_ADFCallbackFunctionString;
}
E GetCallbackEventReference中的clientCallback参数,即客户端回调函数。 利用该回调函数解析服务器返回的结果。