全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
上篇我们介绍了ArcGIS Server9.3 AJAX的Client Callback解决方案。这一方案是92版本所支持的,在最近的93版本中仍然支持。不过93版本又支持另一种最新的AJAX解决方案,我们称之为ASP.NET AJAX解决方案。
注:EDN帮助文档上称之为ASP.NET AJAX partial postback solutions,其实就是对应着ASP.NET AJAX技术。
2007年的时候微软发布了ASP.NET AJAX开发框架,VS2008中默认安装,该框架提供了一个完整的客户端——服务器异步通信的方案。AJAX框架提供了一组AJAX控件 (ScriptManager、UpdatePanel等服务器控件)和API管理异步通信,同时通过客户端的Microsoft AJAX Library动态更新前台页面。这就使得开发者甚至不用编写客户端脚本就能实现局部刷新。
产生局部页面回送(partial page postback)的控件我们称之为触发器,它必须支持IPostBackEventHandler,IPostBackDataHandler或INamingContainer接口,并且由ScriptManager注册。Web ADF空间事实上大都继承了IPostBackEventHandler接口,也都被ScriptManager所注册,比如Map,OverviewMap,Toolbar等。而TOC有些不同,它继承了PostBackControl类,该类实现了IPostBackEventHandler接口。值得一提的是,页面中存在ScriptManager时,Web ADF会选择partial postback解决方案。
关于UpdatePanel与Web ADF,有几点需要再强调一下。一,我们常将服务器控件放在UpdatePanel中以实现局部页面刷新(partial page rendering)。事实上,我们也可以将它们放在UpdatePanel外,这种方式只需要在页面载入时用ScriptManager注册触发回送的控件就可以了。二,Web ADF已经包含了SciptManager的注册、触发回送的事件以及如何更新客户端的页面内容,因此ADF不需要用UpdatePanel包含。更糟糕的是,如果将ADF放进UpdatePanel中,将会降低效率。因此,我们极力不推荐将ADF放在UpdatePanel里。
如Client Callback一样,按触发的控件是否Web ADF,ASP.NET AJAX的使用情景也分两种:
一、Web ADF 触发局部页面回送
这种情景与Client Callback的第一种情景几乎一样。不同之处在于,ASP.NET AJAX通过将CallbackResults注册成items的形式由ScriptManager返回。
二、非Web ADF触发局部页面回送
在这种情景下,又有三种选择,分别是UpdatePanel,data items,dynamic script. blocks。每一种选择都是微软所支持的标准模式。前面提到将ADF放进UpdatePanel实现刷新将引起效率下降,因此主要看一下另两种选择
(1)dynamic script. blocks
ScriptManager允许在服务器端构建JavaScript函数块,在客户端运行。对于ADF的刷新,script. block一般会调用processCallbakResult函数来处理服务器端传来的CallbackResults。Note,在使用此方式时,页面中必须包含有UpdatePanel控件,但UpdatePanel可以为空。
这种方法的缺陷在于需要对CallbackResult进行转义字符的转换,而在C#与VB.NET中并不相同,需要注意。另一个可能的缺陷在于所有的registed script. blocks都会贮存于内存,有可能会导致不必要的问题。
这种方法也有一些好处。一个是不需要像UpdatePanel那样实现完全刷新,只部分刷新需要更新的项目。另一个好处在于不需要定制客户端的处理代码,可以都交由processCallbakResult函数来处理。
(2)data items
该方法需要先插入一段自定义的JavaScript函数用来注册data item的异步响应处理函数,该函数会将服务器传来的data items传送给processCallbackResult函数来处理。JavaScript函数如下所示:
<script>
Sys.Application.add_init(onInitFunction);
// Called once during application initialization
function onInitFunction()
{
Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(AsyncResponseHandler);
}
// Called whenever a response to a partial postback is processed on the client
function AsyncResponseHandler(sender, args)
{
var dataItems = args.get_dataItems();
if (dataItems['__Page'] != null)
ESRI.ADF.System.processCallbackResult(dataItems['__Page']);
}
</script>
另外,对每一个data item,都需要ScriptManager注册,例如:
ScriptManager1.RegisterDataItem(Page, Map1.CallbackResults.ToString(), false);
data item的请求响应示意图如下: