ArcGIS Web 应用开发框架(ADF)中的Ajax
2009-09-14 21:19
633 查看
我希望各位看官在看这篇文章之前,先对.NET中内置的Ajax了解较透,如果还不是很明白,建议先看我的上一篇博文.NET内置的Ajax工作原理
ESRI ArcGIS Server 9.2 的web应用开发框架充分利用了ASP.NET中的回调技术。我们来看看利用Visual Studio 模板创建的默认应用程序中如何利用回调的。
首先看到默认的主页面Default.aspx 对应的类 WebMapApplication 实现了 ICallbackEventHandler 接口。
我们再以Identify工具来深入了解应用开发框架。
在 WebMapApplication 类的 Load 事件处理器中,调用 new MapIdentify(Map1) 初始化Identify 工具。在 MapIdentify 类的构造函数中,调用了SetupIdentify 方法。该方法首先通过调用 GetCallbackEventReference 方法来生成客户端脚本,然后调用 RegisterClientScriptBlock 注册一个名为 identifyCallbackFunctionString 的 JavaScript 函数,该函数中调用生成的客户端脚本。
在 display_mapidentify.js 文件的 MapIdClick 函数(Identify 事件处理器)中调用了 identifyCallbackFunctionString 函数,从而触发了 WebMapApplication 类的 RaiseCallbackEvent 方法。
RaiseCallbackEvent 方法不仅需要处理 Identify 工具,还需要处理其他工具,本实例中包括关闭应用程序与获取版权文本。为了在该方法中判断是哪个工具启动了该方法调用,需要在传入在参数中包含表明调用“身份”。同时由于在传入参数中还需要其他可能更多的信息,例如Identify工具,不仅需要表明调用者身份的信息,还需要当前用户单击处 X、Y 坐标信息。为了能在RaiseCallbackEvent 方法中把这些信息都解释出来,本实例使用的是
"参数名1=参数值1&参数名2=参数值2"
式。例如在 MapIdClick 函数中传入的是
"ControlID=Map1&ControlType=Map&EventArg=MapIdentify&Map1_mode=MapIdentify
&minx="+zleft+"&miny="+ztop
而在 RaiseCallbackEvent 方法(或者是 RaiseCallbackEvent 中调用的 一个webservice方法,一个自定义类方法),通过调用 Split("&".ToCharArray ()) 方法将各个 “参数名=参数值” 放置到一组数组中,然后再通过建立哈希表的方式把“参数名” 与 “参数值” 分开,具体的代码如下:
string[] keyValuePairs;//含有”=“的数组
string[] keyValue;//只有字符串的数组
NameValueCollection m_queryString = new NameValueCollection ();//键值对的集合
keyValuePairs = eventArgument.Split("&".ToCharArray ());//eventArgument是客户端传入的参数
if (keyValuePairs.Length > 0)//如果传递的参数是argA=arg1&argB=arg2……形式的,也就是说参数不止一个
{
for (int i = 0; i < keyValuePairs.Length; i++)
{
keyValue = keyValuePairs.GetValue(i).ToString().Split("=".ToCharArray());
m_queryString .Add(keyValue[0], keyValue[1]);
}
}
else//传递的参数只有一个
{
keyValue = eventArgument.Split("=".ToCharArray());
if (keyValue.Length > 0)//如果有参数传递过来的话
{
m_queryString .Add(keyValue[0], keyValue[1]);
}
}
//通过htQueryString["EventArg"]这种方式调用参数的值
return "您选择的工具名称是: " + m_queryString ["EventArg"].ToString() ;
通过执行上诉的代码后,只需要调用m_queryString ["EventArg"]就能判断是哪个工具启动该方法的调用。如果是 Identify 工具,那么该值就为 MapIdentify 。
在判断出调用工具是 Identify 后, RaiseCallbackEvent 方法调用 MapIdentify 类的 Identify 方法得到返回值。
通过解析 Arcserver ADF 中的 Ajax ,就不难理解为什么利用 ArcServer ADF 开发的 webgis 产品中地图的刷新是如此之快了。。。。。。。。。。。。。
ESRI ArcGIS Server 9.2 的web应用开发框架充分利用了ASP.NET中的回调技术。我们来看看利用Visual Studio 模板创建的默认应用程序中如何利用回调的。
首先看到默认的主页面Default.aspx 对应的类 WebMapApplication 实现了 ICallbackEventHandler 接口。
我们再以Identify工具来深入了解应用开发框架。
在 WebMapApplication 类的 Load 事件处理器中,调用 new MapIdentify(Map1) 初始化Identify 工具。在 MapIdentify 类的构造函数中,调用了SetupIdentify 方法。该方法首先通过调用 GetCallbackEventReference 方法来生成客户端脚本,然后调用 RegisterClientScriptBlock 注册一个名为 identifyCallbackFunctionString 的 JavaScript 函数,该函数中调用生成的客户端脚本。
在 display_mapidentify.js 文件的 MapIdClick 函数(Identify 事件处理器)中调用了 identifyCallbackFunctionString 函数,从而触发了 WebMapApplication 类的 RaiseCallbackEvent 方法。
RaiseCallbackEvent 方法不仅需要处理 Identify 工具,还需要处理其他工具,本实例中包括关闭应用程序与获取版权文本。为了在该方法中判断是哪个工具启动了该方法调用,需要在传入在参数中包含表明调用“身份”。同时由于在传入参数中还需要其他可能更多的信息,例如Identify工具,不仅需要表明调用者身份的信息,还需要当前用户单击处 X、Y 坐标信息。为了能在RaiseCallbackEvent 方法中把这些信息都解释出来,本实例使用的是
"参数名1=参数值1&参数名2=参数值2"
式。例如在 MapIdClick 函数中传入的是
"ControlID=Map1&ControlType=Map&EventArg=MapIdentify&Map1_mode=MapIdentify
&minx="+zleft+"&miny="+ztop
而在 RaiseCallbackEvent 方法(或者是 RaiseCallbackEvent 中调用的 一个webservice方法,一个自定义类方法),通过调用 Split("&".ToCharArray ()) 方法将各个 “参数名=参数值” 放置到一组数组中,然后再通过建立哈希表的方式把“参数名” 与 “参数值” 分开,具体的代码如下:
string[] keyValuePairs;//含有”=“的数组
string[] keyValue;//只有字符串的数组
NameValueCollection m_queryString = new NameValueCollection ();//键值对的集合
keyValuePairs = eventArgument.Split("&".ToCharArray ());//eventArgument是客户端传入的参数
if (keyValuePairs.Length > 0)//如果传递的参数是argA=arg1&argB=arg2……形式的,也就是说参数不止一个
{
for (int i = 0; i < keyValuePairs.Length; i++)
{
keyValue = keyValuePairs.GetValue(i).ToString().Split("=".ToCharArray());
m_queryString .Add(keyValue[0], keyValue[1]);
}
}
else//传递的参数只有一个
{
keyValue = eventArgument.Split("=".ToCharArray());
if (keyValue.Length > 0)//如果有参数传递过来的话
{
m_queryString .Add(keyValue[0], keyValue[1]);
}
}
//通过htQueryString["EventArg"]这种方式调用参数的值
return "您选择的工具名称是: " + m_queryString ["EventArg"].ToString() ;
通过执行上诉的代码后,只需要调用m_queryString ["EventArg"]就能判断是哪个工具启动该方法的调用。如果是 Identify 工具,那么该值就为 MapIdentify 。
在判断出调用工具是 Identify 后, RaiseCallbackEvent 方法调用 MapIdentify 类的 Identify 方法得到返回值。
通过解析 Arcserver ADF 中的 Ajax ,就不难理解为什么利用 ArcServer ADF 开发的 webgis 产品中地图的刷新是如此之快了。。。。。。。。。。。。。
相关文章推荐
- ArcGIS Web 应用开发框架(ADF)中的Ajax (转)
- Portal-Basic Java Web 应用开发框架:应用篇(四) —— 文件上传和下载
- 分享:TreeFrog 1.1 发布,C++ Web 应用开发框架
- Struts 2.x仍然明显落后于时代。 Struts 2.x这一类老牌Web MVC开发框架仅能用于开发瘦客户端应用,无法用来开发对于交互体验要求更高的应用。
- Portal-Basic Web 应用开发框架:应用篇
- Ajax: A New Approach to Web Applications(Ajax: 开发web应用的新方法)
- 介绍几个不错的开发Web App & Ajax的框架
- Ajax: Web应用开发的一种新方法
- Portal-Basic Java Web 应用开发框架:应用篇(十二) —— Action Convention
- Portal-Basic Java Web 应用开发框架 v2.6.1(源码、示例及文档)
- Portal-Basic Java Web 应用开发框架:应用篇(十四) —— 异步 Action
- Portal-Basic Java Web 应用开发框架:应用篇(九) —— 多入口 Action
- Portal-Basic Java Web 应用开发框架(v2.5.4 - 源码、示例及文档可在 Google Code 下载)
- ASP.NET AJAX 在Web开发中的应用
- Python实战开发之Pyramid Web框架在商城项目中的应用教程
- 10.MVC框架开发(Ajax应用)
- Portal-Basic Web 应用开发框架 —— 前言
- Portal-Basic Web 应用开发框架:应用篇(七) —— 页面静态化
- 超棒的Web和移动应用开发框架(三)
- Web 应用的 UML 建模与 .NET 框架开发