写在前面,可能有点啰嗦,只是单纯的想实现异步刷新网页上map控件这样的一个功能,明明知道就目前的平台技术而言,仅仅就是一两句的代码,但是我还是浪费了两三天的时间在网上查找,而且收获甚微,最后还是看了ESRI的帮助文档才豁然开朗(本人英文差劲实在没办法的情况下才会去看英文档的 - -!)。Arcgis Server 的异步刷新是基于Ajax技术实现的,关于此类的文章不多,而且大多都是几年前介绍callbackresult 回调机制 等 Ajax原理的老贴,对于如同我一样,对js研究的不透彻,而且短时间就需要拿出项目解决方案的人来说,看的更是云里雾里。就目前而言基本上都是基于 vs2010 +arcgis server 10 甚至更高的版本,实际上要实现这样的功能已经非常的简单,当然原理机制如果理解的话会更好,此文的目的在于使用最简单的方法,来实现Arcgis server的异步刷新功能,不用填写太多的代码,也不用去管callbackresult之类的回调机制,希望对于像我这样的新人有一个启示,对于现在使用 ArcGIS API for JavaScript 的人来说,本篇基本可以无视,因为不用去碰JavaScript完全只靠搭建几个控件就可以实现, 而对于.net 3.5之后,Ajax功能已经可以原生支持在vs平台上,我们实际上更喜欢不用了解更多的细节,使用ScriptManager和UpdatePanel 基本上就可以完成决大多数的页面异步刷新,而不用去在意Ajax是如何执行的,因为scriptManager已经帮助我们完成了后台的运作。

好了废话一大堆,正题:

环境就是vs2010 C# +arcgis 10 server

先说vs的异步刷新功能的实现主要就是ScriptManager和UpdatePanel 这方面那一本的.net 35之后的书籍都有介绍,实现起来非常的简单,不多说了,这有一篇介绍他们应用的不错http://www.jb51.cc/article/p-ctoligvs-kz.html

下面在说arcgis 的异步刷新,如果有兴趣研究一下原理的可以看一下此文:

http://www.jb51.cc/article/p-percahkb-kz.html我认为这篇说的最好最深刻的一句话就是“谁请求,谁管理”完全的精髓要点啊。

gis 的ADF控件之间的刷新与控制,这个不多说了,比如map控制TOC只需要Map1.CallbackResults.copyFrom(Toc1.CallbackResults); 就搞定了TOC的刷新。

我们实际应用中最关心的就是非ADF控件来控制的异步刷新。

(这里是官方帮助有兴趣的看一看吧ASP.NET AJAX partial postback solutions,How to manage callback content for Web ADF control when partial postback is initiated by Non-Web ADF control)

如果不使用.net 的Ajax控件,也就是ScriptManager的话,而采用ASP.NET的Client Callback方法这里就不说了。

而对于使用ScriptManager的话esri给出了几个解决方案:

1、使用UpdatePanels的方法;

如果将Web ADF控件放入UpdatePanel,则根据UpdatePanel的特性,会刷新里面整个Web ADF控件,这是不必要的,Web ADF控件所需要更新的内容仅仅是服务器端产生的CallbackResults,由客户端的processCallbackResult()即可完成,所以这个也就不说了。

2、作为dynamic script blocks:

因为“注册的dynamic script blocks会保存在客户端内存中,最终可能会导致浏览器内存超出限制”的弊端也不多说了。

3、把ADF控件注册为ScriptManager的data items方法;

举个例子这个方法如何实现,比如说我们网页上有一个asp Button1 来控制Map1控件加入一个图层,点击之后只需要map1控件自己刷新,前提是页面上已经存在了ScriptManager控件,并且ScriptManager必须为页面上的第一个控件。只需要三步

1)在网页中利用PageRequestManager捕捉pageLoading事件从而将注册成data items的控件实现局部异步刷新,只需要在网页前台代码部分插入以下代码:

 <script type="text/javascript" language="javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(AsyncResponseHandler);
        function AsyncResponseHandler(sender,args) {
            var dataItems = args.get_dataItems();
            if (dataItems['__Page'] != null)
                ESRI.ADF.System.processCallbackResult(dataItems['__Page']);
        }  
      </script>


2)在网页读入的时候注册需要控制实现异步刷新的控件

 protected void Page_Load(object sender,EventArgs e)
        {
            ScriptManager1.RegisterasyncPostBackControl(Button1);
        }
3)需要控制局部刷新时候,只需要把要控制的GIS ADF控件注册成data items,比如此例子,处理完map1添加图层的代码后,在Button1点击事件里添加上这一句
ScriptManager1.RegisterDataItem(Page,Map1.CallbackResults.ToString(),false);

 
如果需要同时刷新其他的GIS ADF 控件比如说Toc控件只需执行ADF控件的CallbackResults::copyFrom方法 
 
 Toc1.Refresh();
 Map1.CallbackResults.copyFrom(Toc1.CallbackResults);

至此非ADF控件控制的异步刷新功能就很容易实现了;

对于arcgis 的异步刷新的方法,只能采用使用.net Ajax控件和ASP.NET的Client Callback方法中俩者之一,如果页面上使用了ScriptManager控件,就只能使用这种方法,而大多数的情况下,同一张页面中我们不但要控制Arcgis ADF控件的异步刷新,还要控制非GIS ADF控件的异步刷新,所以使用ScriptManager控件的方法,是非常的简便便捷的。

Arcgis Server .NET ADF 异步刷新方法非ADF控件的更多相关文章

  1. Vue+ ArcGIS JavaScript APi详解

    这篇文章主要介绍了Vue+ ArcGIS JavaScript APi,文中需要注意ArcGIS JavaScript3.x 和ArcGIS JavaScript 4.x框架差异较大,本文从环境搭建开始到测试运行给大家讲解的非常详细,需要的朋友可以参考下

  2. Arcgis Server .NET ADF 异步刷新方法非ADF控件

    我们实际应用中最关心的就是非ADF控件来控制的异步刷新。而对于使用ScriptManager的话esri给出了几个解决方案:1、使用UpdatePanels的方法;如果将WebADF控件放入UpdatePanel,则根据UpdatePanel的特性,会刷新里面整个WebADF控件,这是不必要的,WebADF控件所需要更新的内容仅仅是服务器端产生的CallbackResults,由客户端的processCallbackResult()即可完成,所以这个也就不说了。

  3. ArcGIS Server9.3 AJAX系列(一)之CallbackResults

    ArcGISServer93的WebADF为开发人员提供了可以在AJAX环境中管理客户端与服务器之间传输的框架。

  4. ArcGIS Server 中的 Ajax技术的实现举例说明

    ArcGISServer在其最新的ArcGISServer9.2中为解决含有ADF组件页面局部刷新问题,在Asp.Net2.0Callback机制的基础上扩充引入了Ajax架构。所以从这点来看,.NetCallback回调机制对于我们每一个学习ArcGISServer的人来说还是依然至关重要的!publicstringGetCallbackEventReference参数:control处理客户端回调的服务器Control。该控件必须实现ICallbackEventHandler接口并提供RaiseCal

  5. ArcGIS Server .NET ADF中的AJAX之深入浅出/CallbackResult详解

    论坛中已有不少关于.NETADF中AJAX的精彩讲解,但切入点有些抽象。再辅以前人的教程,由此能更充分地掌握.NETADF中AJAX的工作原理。如下图所示:ADFAJAX2.jpg为了逻辑上的需要,比如一个动作对应一个CallbackResult,于是就有了上图的CallbackResultCollection。CallbackResults传回到客户端后,WebADFJavascript中的processCallbackResult()函数就会自动对其进行解析。因为请求可能由任何一个控件触发,所以每个W

  6. ArcGIS Server .Net ADF中的AJAX

    clientCallback一个客户端事件处理程序的名称,该处理程序接收服务器端事件返回的结果。context启动回调之前在客户端的客户端脚本信息。理解ajax的基本原理,才能较好的理解ajax在arcgisserver.Net中的应用。ArcGISServer.NetADF中的AJAX(二)Ajax在ArcGISServer中的应用也是遵循基本的那几个步骤,但为什么使用起来的时候好像感觉摸不着头脑了呢?ArcGISServer.Netadf提供了各种控件,这些控件里面都集中了复杂的功能,它们的刷新都不是

  7. ArcGIS Server9.3 AJAX系列(二)Client CallBack解决方案

    之前的文章有提到ArcGISServer93提供了两种AJAX模式,一种是clientcallback模式,一种是partialpostback模式。本篇将主要介绍ArcGISServer的script.callback解决方案,对应clientcallback模式。ClientCallback模式,我们称之为客户端回调。使用这种AJAX模式时,处理客户端请求的服务器控件必须实现ICallbackEventHandler接口。该接口提供了两个方法,GetCallbackResult和RaiseCallba

  8. arcgis for flex或silverlight全国地图天气预报的实现

    总结以上是DEVMAX为你收集整理的arcgisforflex或silverlight全国地图天气预报的实现全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  9. 天津政府应急系统之GIS一张图arcgis api for flex讲解四地图导航控件模块

    总结以上是DEVMAX为你收集整理的天津政府应急系统之GIS一张图arcgisapiforflex讲解四地图导航控件模块全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  10. arcgis for flex全国地图天气预报的具体实现过程解析

    总结以上是DEVMAX为你收集整理的arcgisforflex全国地图天气预报的具体实现过程解析全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部