《ArcGISServer9.3中AJAX支持两种实现方式:Callback机制和PartialPostback机制》由会员分享,可在线阅读,更多相关《ArcGISServer9.3中AJAX支持两种实现方式:Callback机制和PartialPostback机制(12页珍藏版)》请在金锄头文库上搜索。
1、 ArcGIS Server 9.3 中 AJAX 支持两种实现方式:Callback 机制和 PartialPostback 机制。 收藏 ArcGIS Server 9.3 中 AJAX 支持两种实现方式: Callback 机制和 PartialPostback 机制。 Callback 机制 1 、 Callback 机制的实现过程 ( 1 )在客户端的控件一般是 html 控件、 Toolbar 上的按钮或者一些超链接( 的控件不行) 。在客户端的实现代码一般如下: function btnStreet1_onclick() / 获取控件的值 var v=document.getE
2、lementById(selStreet ).value; / 生成请求字符串 var message=ControlID=Map1&ControlType=Map&Type=queryS&EventArg= + v; var context = Map ; / sCallBack 由服务端的 Page_load 事件中生成的,用于请求服务端的 js 代码 然后在控件的 click 事件或者其他对应的方法中调用上述 js 方法。 例如: 在 html 按钮的属性中 :onclick=return btnStreet1_onclick() Toolbar 上的按钮 : ClientAction=
3、SetMapView() / SetMapView() 类同于上述 js 方法 超链接 : 按兴趣点定位 /LocByInterestPoint(lctInterestPoint.aspx) 类同于上述 js 方法 (2 )在服务器端(后台)的代码一般如下: / 注意首先要继承 ICallbackEventHandler 接口 public partial class _Default :System.Web.UI.Page ,ICallbackEventHandler public string sCallBack = string .Empty; protected void Page_L
4、oad(object sender, EventArgs e) sCallBack = Page.ClientScript.GetCallbackEventReference(this , message , processCallbackResult , context , postBackError , true ); 然后就是重载 ICallbackEventHandler 接口的两个成员函数了, #region ICallbackEventHandler 成员 / 负责把结果回传给客户端 public string GetCallbackResult() return smapstri
5、ng; / 负责接收客户端 javascript 传来的参数,并对客户端的请求进行处理 public void RaiseCallbackEvent(string eventArgument) try if (eventArgument.Contains(SetMapView ) ZoomToZBExtent();/ 自定义显示范围的实现函数 else if (eventArgument.Contains(DMLocation ) LocationByIntePoint();/ 按兴趣点定位的实现函数 catch (Exception Err) string s = Err.Message;
6、#endregion private void ZoomToZBExtent() if (SessioncurMapExtentStr = null ) return ; string sZBStr = SessioncurMapExtentStr .ToString(); if (sZBStr.Trim() = string .Empty) return ; string sZB = sZBStr.Split(/ ); double dXMin = double .Parse(sZB1); double dYMin = double .Parse(sZB0); double dXMax =
7、double .Parse(sZB3); double dYMax = double .Parse(sZB2); ESRI.ArcGIS.ADF.Web.Geometry.Envelope pEnve = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope (dXMin, dYMin, dXMax, dYMax); Map1.Extent = pEnve; Map1.CallbackResults.CopyFrom(Toolbar1.CallbackResults); smapstring = Map1.CallbackResults.ToString(); 另
8、外 RaiseCallbackEvent 的其他实现方式有: public string RaiseCallbackEvent(string eventArgument) NameValueCollection keyValColl = CallbackUtility .ParseStringIntoNameValueCollection( eventArgument ); if (keyValCollEventArg .ToString() = MapIdentify ) . /功能实现代码 return Map1.CallbackResults.ToString(); else if (k
9、eyValCollType .ToString() = clear ) . /功能实现代码 return Map1.CallbackResults.ToString(); 2 、一些重要的代码 ( 1 )将其他控件在服务器端处理的结果返回客户端 Toc1.Refresh(); Map1.CallbackResults.CopyFrom(Toc1.CallbackResults); ( 2 )添加 CallbackResult String javascriptString = alert(Hello); CallbackResult customCallbackResult= Callback
10、Result.CreateJavaScript(javascriptString); Map1.CallbackResults.Add(customCallbackResult); 或者 string value = key.Value.ToString(); CallbackResult callbackResult = new CallbackResult(div, Label + key.Key.ToString(), innercontent, value); Map1.CallbackResults.Add(callbackResult); (3 )生成 CallbackResult
11、 无参数: CallbackResult callbackResult=new CallbackResult(); 三个参数: CallbackResult callbackResult=new CallbackResult(Control control,string eventarg,params objectparameters); 例如: object oa = new object1; oa0 = MyMapTip.style.display=none; CallbackResult rst = new CallbackResult(pMap.Page, javascript, oa
12、); pMap.CallbackResults.Add(rst); 四个参数: CallbackResult callbackResult=new CallbackResult(string controlType,string controlID,string eventarg,params objectparameters); 例如: string value = key.Value.ToString(); CallbackResult callbackResult = new CallbackResult(div, Label + key.Key.ToString(), innercon
13、tent, value); Map1.CallbackResults.Add(callbackResult); 其他的例子; 1. 刷新 ADF 自身的控件 TOC: ESRI.ArcGIS.ADF.Web.UI.WebControls.Toc toc1 = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Toc)map.Page.FindControl(Toc1);/toc 变化代码 toc1.Refresh();string myTocString= toc1.CallbackResults.ToString();CallbackResult myTocCallBa
14、ckString = new CallbackResult(TOC, Toc1, content, myTocString);map.CallbackResults.Add(myTocCallBackString); 2. 刷新 控件 ESRI.ArcGIS.ADF.Web.UI.WebControls.Toctoc1 = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Toc)map.Page.FindControl(Toc1);toc1.Nodes.Clear();toc1.Refresh();string aaa = toc1.CallbackResults.T
15、oString();CallbackResult tocstring = new CallbackResult(TOC, Toc1, content, aaa);map.CallbackResults.Add(tocstring); PartialPostback 方法 实现方法一: 要实现 PartialPostback ,首先要在页面上添加一个 ScriptManager 控件(页面中的第一个控件) ( 1 )在客户端的控件一般是 控件( html 服务器控件也行) 。客户端一般不需要写 js 代码。 ( 2 )在服务器端(后台)的实现过程如下: 首先将控件注册为异步 postback 控件: protected void Page_Load(object sender, System.EventArgs eventArgs) ScriptManager1.RegisterAsyncPostBackControl(Button1); / 下面这段也是进行一些注册和初始化的工作,也是必要的 protected void Page_PreRender(o