惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
C
Check Point Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
F
Full Disclosure
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
博客园 - 司徒正美
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
V
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
O
OpenAI News
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
I
InfoQ
D
Docker
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
博客园 - Franky
B
Blog
Scott Helme
Scott Helme
博客园 - 叶小钗
D
DataBreaches.Net

博客园 - 漫步人生

c# 使用GetOleDbSchemaTable获取access数据库结构 xp上vs2010+IE8无法调试脚本 iis 上部署asp.net程序出错排查 windows2008的共享 使用sqlite绿色部署问题 在vs中使用正则表达式 - 漫步人生 事件不应该有返回值 ae的com对象在dotnet中的释放问题 adf for dotnet中servercontext的释放 修改Windows中ASPNET账户的密码 ae显示arcserver的地图服务 arcgis 编辑时独占mdb - 漫步人生 adf for dotnet中动态给ArcGis Server服务添加图层 js中在不知道属性名时获取属性对象 html文档中的name属性 ie中js a光标位置 windows局域网内以arcgis server local的方式连接arcserver服务器 c#与 如何调试 C#与C/C++的互操作
adf中UpdatePanel刷新地图
漫步人生 · 2011-06-16 · via 博客园 - 漫步人生

在adf开发中,一般的工具可以使用adf的toolbar框架,实现IMapServerToolAction等接口来实现(这时也可以写自己的脚本,然后在tool的ClientAction中指定,这里有个技巧,可以通过'%toolbarItem%'作为参数传入脚本中,如:ClientAction="aaa('%toolbarItem%');",传入的是tool的名称)

但是一些交互性很强的工具,如果使用上面的方法就很麻烦,如要做一个arcmap里面的按照属性选择要素的工具,要多次跟服务器交互。

我想到的做法有2种,第一种是给每个要跟服务器交互的控件实现ajax操作,这种做法的坏处是所有操作的代码都得自己写,比如一次ajax请求中更新了某些控件的输出,这时就得自己实现修改控件的输出,好处是啥都是自己写的,也就啥得可以控制

第二种是使用updatepanel来处理交互,这种做法的好处是,updatepanel内的ajax处理就像我们一般写webform一样写就可以了,而不用自己更新控件的输出,但这时的问题是如何刷新地图,因为updatepanel只会刷新控件输出而不会刷新地图。

把map控件放在updatepanel中?这种想法只能说明没明白map是怎么刷新的。当我们实现IMapServerToolAction接口写一个工具的时候,可以调用Map.Refresh()来刷新地图,反编译可以看到Map的做法是 this.CallbackResults.Add(new CallbackResult(this, "invoke", new object[] { "refresh" }));,这句话把刷新地图这个callback加到callbackresults中,从命名就猜出来是回调,那么这个回调在哪里执行呢,查阅ESRI.ADF.System.Debug.js文件就可以发现processCallbackResult = ESRI.ADF.System.processCallbackResult = function (response, context)方法是用来处理CallbackResults的,里面也有invoke这种操作的处理。所以刷新地图需要调用map.refresh方法,并且在客户端调用处理callbackresults的js方法,如:ESRI.ADF.System.processCallbackResult,但updatepanel的js回调肯定是不会调用这个方法的。只要我们能够在updatepanel的ajax请求回调中调用ESRI.ADF.System.processCallbackResult 就可以让地图刷新了。

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () {})刚好就是用来在updatepanel的ajax请求回调中执行自定义js用的。

到此思路清晰了,只需要将map的callbakcreuslts转换成json字符串,传递给ESRI.ADF.System.processCallbackResult作为第一个参数就可以了