zoukankan      html  css  js  c++  java
  • ArcGIS Server中从客户端往服务器端传参数的几种方法(转)

    到现在我对asp.net还处于初学阶段,但这不太影响我利用ags的功能。因为同一种功能可以有多种方法去实现。
    比如要在数据源中添加一个点,就需要在客户端完成动作后,将这个点的坐标传到服务器端,调用ao来完成工作。就我目前的认识,想到有一下几个办法来完成此工作:
    1、自定义adf的工具。工具提供了很好客户端与服务器端交互的办法,实现IMapServerToolAction接口即可。具体请参考帮助或其他资料。但有时候,比如这次,我们并不想让用户点击屏幕后立即在此处生成数据。先用adf javascript绘制一个graphicfeature,用户可以对此位置进行修改。点击保存按钮后才真正在服务器端添加数据。这种情况下自定义工具就不行了;
    2、ICallBackEventHandler,这是最基本(当然还有更基本的xmlhttprequest)方法。arcgis server 9.3中支持两种ajax的方式:asp.net ajax和callback。这个接口是后者实现的关键。该接口中的raisecallbackevent()方法可以用来接收客户端string类型的参数,可以满足此次需求。但写起来有些麻烦;
    3、在客户端放置隐藏控件。这是我在网上搜索后找到的一种普遍的解决办法。在客户端放置一个隐藏的asp.net或者传统的http控件,通过js给其赋值,然后在postback时服务器就可以获得该控件的值。但我发现这样做必须进行postback,也就是对页面进行刷新,在callback机制(partial postback)下,服务器端无法获得想要的参数值。我猜想是因为不同于刷新页面,客户端并没有将页面中其他的值传到服务器上(如果有不对,请大家指正)。
    4、利用adf的控件,CallbackButton。真冷无牙朋友之前发过帖子http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=25526。那时9.3的正式版本还没有出来。但现在这个控件已被收录到adf的标准控件中了(我不太确定是9.3 sp1中的还是9.3本身的)。该控件利用了adf的callbackresults框架,利用起来非常方便。可以查看源代码,发现其实还是对ICallBackEventHandler机制进行了封装。但用起来方便就行。该控件有一个CallbackArgumentsJavaScript参数,可以在客户端执行js,将变量值保存在控件中,服务器端利用CallbackArguments来获取客户端的参数值。比如一下代码:

    1.   
    2.     protected void CallbackButton1_Clicked(object sender, EventArgs args)
    3.     {
    4.         string text = CallbackButton1.CallbackArguments["txt"];
    5.         CallbackButton1.CallbackResults.Add(Label1, "innercontent", text);
    6.     }

    7.   <script runat="server">
    8.     protected void CallbackButton1_Clicked(object sender, EventArgs args)
    9.     {
    10.         string text = CallbackButton1.CallbackArguments["txt"];
    11.         CallbackButton1.CallbackResults.Add(Label1, "innercontent", text);
    12.     }
    13. </script>
    14. <html xmlns="http://www.w3.org/1999/xhtml" >
    15. <head runat="server">
    16.     <title>Callback Button sample</title>
    17. </head>
    18. <body>
    19.     <form id="form1" runat="server">
    20.     <div>
    21.         Enter some text: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    22.         <br />
    23.         <br />
    24.         <esri:CallbackButton ID="CallbackButton1" runat="server" OnClicked="CallbackButton1_Clicked"
    25.             Text="Click Me!" Width="139px" CallbackArgumentsJavaScript="'txt='+document.getElementById('TextBox1').value" />
    26.         <br />
    27.         <br />
    28.         Echo: <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    29.     </div>
    30.     </form>
    31. </body>
    32. </html>
    复制代码
    具体可以参考帮助。但有一点要说明的是,CallbackArguments是利用了adf的ParseStringIntoNameValueCollection方法将值解析成NameValueCollection。而查看该方法的定义可以得知,如要传多个参数到服务器端,应当用“&”符号来连接。比如CallbackArgumentsJavaScript="'txt='+document.getElementById('TextBox1').value+‘&txt1='+document.getElementById('TextBox2').value"(帮助中也不说,esri论坛上也没有……)

    至于其他方法,肯定还是有的,比如发送请求的方式(但这个我不会,烦请会的同志出来讲讲)等。
    一起学习GIS及其二次开发,一起进步!
  • 相关阅读:
    CircleImageManager——圆形 / 圆角图片的工具类
    自定义的开关按钮——SwitchButton
    将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网
    用纯JAVA代码来创建视图
    用自定义的RoundImageView来实现圆形图片(可加边框)
    用开源项目RoundedImageView来实现 圆形 / 圆角 / 椭圆的图片
    ImageView和onTouchListener实现,点击查看图片细节
    MySql修改字符集
    Docker下操作指令
    CentOS下Docker安装
  • 原文地址:https://www.cnblogs.com/tuncaysanli/p/1550960.html
Copyright © 2011-2022 走看看