目的:
1.arcgis server9.2 ADF的Callback机制。
准备工作:
1.用ArcGis Server Manager或者ArcCatalog发布一个叫world的Map Service,并且把这个Service启动起来。
2.找到DeveloperKit\SamplesNET\Server\Web_Applications目录下的Common_CallbackCsharp.zip。
开始:
1.新建名为Callback的ASP.NET Web应用程序。
2.在Default.aspx页面中加入MapResourceManager控件ID为MapResourceManager1,并且设置MapResourceItem的属性;Map控件ID为Map1,MapResourceManager属性为MapResourceManager1。具体过程可以参考ArcGIS.Server.9.2.DotNet自带例子分析(一、一);在地图控件的4个边分别添加LabelW、LabelN、LabelE、LabelS DIV控件,具体代码如下:
1
protected void Map1_ExtentChanged(object sender, ESRI.ArcGIS.ADF.Web.UI.WebControls.ExtentEventArgs args)
2
}
4.在页面上添加Toolbar控件ID为Toolbar1,BuddyControls属性为Map1,同时添加ZoomIn、ZoomOut、Pan、FullExt四个Map Navigation按钮,然后添加一个Tool按钮Name属性为CenterAt,ClientAction属性为Point,ServerActionAssembly属性为Callback,ServerActionClass属性为Callback.CustomTool。具体的代码如下:2
1
<esri:Toolbar ID="Toolbar1" runat="server" BuddyControlType="Map"
2
..
3
<esri:Tool ClientAction="Point" JavaScriptFile="" Name="CenterAt" ServerActionAssembly="Callback" ServerActionClass="Callback.CustomTool" />
4
..
5
</esri:Toolbar>
5.新建CustomTool.cs类,实现IMapServerToolAction接口具体的代码和说明如下:2
3
4
5
1
namespace Callback
2
6.这样重新定位地图中心的功能完成了,而已运行试验一下效果。 2
7.在Default.aspx页面上添加一个Menu控件ID为Menu1,同时添加2个子项Asia和Africa,具体的代码如下:
1
<asp:Menu ID="Menu1" runat="server" BackColor="#B5C7DE" DynamicHorizontalOffset="2"
2
Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284E98" StaticSubMenuIndent="10px">
3
<StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
4
<DynamicHoverStyle BackColor="#284E98" ForeColor="White" />
5
<DynamicMenuStyle BackColor="#B5C7DE" />
6
<StaticSelectedStyle BackColor="#507CD1" />
7
<DynamicSelectedStyle BackColor="#507CD1" />
8
<DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
9
<Items>
10
<asp:MenuItem Text="Zoom To" Value="Zoom To">
11
<asp:MenuItem Text="Asia" Value="Asia" NavigateUrl="javascript: ZoomToLocationClient('Asia');"></asp:MenuItem>
12
<asp:MenuItem Text="Africa" Value="Africa" NavigateUrl="javascript: ZoomToLocationClient('Africa');"></asp:MenuItem>
13
</asp:MenuItem>
14
</Items>
15
<StaticHoverStyle BackColor="#284E98" ForeColor="White" />
16
</asp:Menu>
8.实现上面菜单的javascript函数ZoomToLocationClient,在页面的结束处添加代码入下:2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
<form id="form1" runat="server">
2

.
3
>
9.Default.aspx切换到代码视图开始编写服务端的代码,实现无刷新必须实现System.Web.UI.ICallbackEventHandler接口,实现 ICallbackEventHandler接口就必须实现GetCallbackResult()和RaiseCallbackEvent(string eventArgument)这2个方法具体的代码和说明入下:2
3
1
namespace Callback
2
10.接下来要把服务端生成的脚本段sCallBackFunctionInvocation写入到页面中,Default.aspx切换到html视图在ZoomToLocationClient(val)方法中添加如下代码:2
1
//根据地名定位地图中心
2
function ZoomToLocationClient(val)
3
}
11.这样Menu控件通过调用ZoomToLocationClient(val)方法请求服务端进行处理然后把处理结果反馈给客户端,由客户端的processCallbackResult方法进行页面显示的更新,关于这个方法具体的可以参考ArcGIS.Server.9.2.DotNet自带例子分析(一)。2
3
12.接下来在RaiseCallbackEvent(string eventArgs)方法中处理ZoomToLocationClient(val)方法发起的请求,具体代码如下:
1
//接收客户端的请求,根据请求字符串eventArgument不同做不同的处理
2
public void RaiseCallbackEvent(string eventArgs)
3
}
13.这样就完成了根据名称定位地图中心的功能,接下来根据输入的坐标重新定位地图的中心,首先Default.aspx切换到html视图在最后的javascript中在添加一个ZoomToPointClient()方法,具体的代码和说明如下:2
3
1
//根据坐标定位地图中心
2
function ZoomToPointClient()
3
14.在页面上添加2个input输入框,ID分别为TextBoxX和TextBoxY用来输入xy的坐标,在添加一个button来执行上面的ZoomToPointClient()方法。具体代码和说明如下:2
3
1
X:<input type="text" id="TextBoxX" style="width: 72px; left: 71px; top: 473px" />
2
Y:<input type="text" id="TextBoxY" style="width: 72px; left: 203px;top: 472px" />
3
<input type="button" value="Zoom To Point" onclick="ZoomToPointClient();" style="left: 318px; top: 470px; width: 150px" />
15.在服务端的RaiseCallbackEvent方法中添加对这个功能实现的代码,代码和说明如下:2
3
1
//接收客户端的请求,根据请求字符串eventArgument不同做不同的处理
2
public void RaiseCallbackEvent(string eventArgs)
3
16.这样就完成了这个练习了,运行查看效果。2
3