Jerome_lau

GIS is changing the World!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ARC IMS中AJAX回调机制(SERVER类似)

Posted on 2009-03-10 19:16  jerome  阅读(349)  评论(0)    收藏  举报

1、前台

Toolbar控件中添加一个按钮,在ClientAction事件上添加一个javascript方法startQuery()

<esri:CommandClientAction="startQuery()"JavaScriptFile=""Name="查询"/>

 

在HTML页面<HEAD></HEAD>中放入一段JavaScript脚本:

<scripttype="text/javascript">

functionstartQuery()

{

context='startSea';

//传往后台的参数

varmessage='search';

// document.getElementById('DropDownList1').value为图层名

message +=','+ document.getElementById('DropDownList1').value;

//注册一个回调,sCallBackFunctionInvocation与后台回调的内容一至

<%=sCallBackFunctionInvocation%>   

}

</script>


2、后台

后台CS代码中,继承ICallbackEventHandler接口,并实现接口中的两个方法:

GetCallbackResult()RaiseCallbackEvent(string eventArgument)

 

 

publicpartialclassDefault: System.Web.UI.Page, System.Web.UI.ICallbackEventHandler

{                       

      //注册回调的字符串

publicstringsCallBackFunctionInvocation;

//回调的字符串

privatestringmapstring;

protectedvoidPage_Load(objectsender,EventArgse)

{

//在Page_Load注册回调

sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this,"message","processCallbackResult","context","postBackError",true);

}

   ///<summary>

   ///接收回调传到后来的参数messageeventArgs实际上就是message的值

   ///</summary>

   ///<param name="eventArgs"></param>

publicvoidRaiseCallbackEvent(stringeventArgs)   

{

//通过判断eventArgs包含的参数,来确定要触发的事件

       if(eventArgs.Contains("search"))

       {

             string[] messages = eventArgs.Split(',');

             stringstr= messages[1];

             StartSearch(str);

       }

}

///<summary>

   ///实现功能的代码

   ///</summary>

   ///<param name="ea"></param>

   private void  StartSearch (stringea)

   {

       string[] messages = ea.Split(',');

       stringstrQuery = messages[1];

       ESRI.ArcGIS.ADF.Web.DataSources.IMS.MapFunctionalitymapFunct = (ESRI.ArcGIS.ADF.Web.DataSources.IMS.MapFunctionality)Map1.GetFunctionality(0);

       MapViewmapView = mapFunct.MapView;

   FeatureLayerpFeatureLayer = (FeatureLayer)mapView.Layers.FindByName(strQuery);

   //获得查询的包络线adfEnv

   Map1.Extent = adfEnv;

//缩放到包络线的范围内

Map1.Refresh();

//将回调信息发回GetCallbackResult()这个方法

mapstring =this.Map1.CallbackResults.ToString();

}


publicstringGetCallbackResult()

{       

 //将回调信息发回前台

       returnmapstring;

}

}

 

回调的顺序:startQuery()触发JavaScript脚本(前台)-->

执行已经注册的回调<%=sCallBackFunctionInvocation%>(前台)-->

 触发Page_Load事件回调代码sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this,"message","processCallbackResult","context","postBackError",true);获得前台传往后台的参数“message(后台)-->

RaiseCallbackEvent(stringeventArgs)(后台)-->

StartSearch(stringea)实现功能的代码(后台)-->

GetCallbackResult()(后台)