zoukankan      html  css  js  c++  java
  • ArcGIS Server 9.3 ADF 右键菜单的单击事件的响应问题

      有些日子没写博客了,最近想写一个关于页面周期的博客但是由于我的理论知识不够,对页面周期还没太了解透,在没有时间进一步了解的情况下,我就不出来丢人了。

      

      下面切入正题,这几天准备在项目里添加一个地图控件的右键菜单,无奈在页面刷新过后右键菜单就失效了,进不去click事件,只能进CustomJavascript方法里,百度谷歌泡了几天也没找到解决办法,最后我在刘光的书上看到他对contextmenu有这么一段说明:“要注意的是,contextmenu控件生成的回调响应规定由web adf javascript来处理,因此,如果页面中其他控件的内容改变必须打包成callbackresults,并加入到contextmenu的callbackresults属性中。”

      就是这句话让我茅塞顿开,因为我进不去click事件的方法里都有别的控件的的回调方法,用来向服务器返回请求获取响应。这就代表着我要把原来写的用map控件生成的回调用contextmenu代替,这样的话这些事都成了contextmenu做的了,他应该不会生气罢工了,呵呵,气氛好紧张,我开个玩笑舒缓下。

      至于为什么会有这样的规定,我也不知道,因为我没有看这两个类的底层代码,不知道esri这样做是处于何种目的。

      文字写的慢,意思也难以表达出来,下面还是我一贯的做法,贴点代码吧,方便跟我一样的小白轻松了解。

    前台代码:

    <%--右键菜单130815--%>        
            <esri:ContextMenu ID="ContextMenu1" runat="server" BackColor="White" OnItemClicked="ContextMenu1_ItemClicked" />

    后台代码:

    ContextMenu1.Items.Clear();
                    ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItem fullextMenuItem = new ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItem("images/fullextent.jpg", "全图", null);
                    ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItem saveMenuItem = new ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItem("images/save.jpg", "截图", null);
                    ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItem dialogueMenuItem = new ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItem("images/04.png", "显示结果", null);
                    //fullextMenuItem.CustomJavascript = "contextMenuClick('" + fullextMenuItem.Text + "')";
                    //saveMenuItem.CustomJavascript = "contextMenuClick('" + saveMenuItem.Text + "')";
                    dialogueMenuItem.CustomJavascript = "contextMenuClick('" + dialogueMenuItem.Text + "')";
                    ContextMenu1.Items.Add(fullextMenuItem);
                    ContextMenu1.Items.Add(saveMenuItem);
                    ContextMenu1.Items.Add(dialogueMenuItem);
    
                    string format = "esriShowContextMenu(event,'{0}','{1}','{2}');return false;";
                    string showContextMenu = string.Format(format, ContextMenu1.ClientID, Map1.UniqueID, "");
                    Map1.Attributes.Add("oncontextmenu", showContextMenu);

    这里我就贴出click事件的代码,里面的具体代码网上很多,我就不贴出来了

    protected void ContextMenu1_ItemClicked(object sender, ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItemEventArgs args)
            {
                switch (args.Item.Text)
                {
                    case "全图":
                        {
                            MapHelper.ShowToolPanel(Map1);
                            ContextMenu1.CallbackResults.CopyFrom(Map1.CallbackResults);
                            break;
                        }
                    case "截图":
                        {
                            MapHelper.SaveAsPicture(Map1);
                            ContextMenu1.CallbackResults.CopyFrom(Map1.CallbackResults);
                            break;
                        }
                }
    
            }

    下面是替换回调:

    CallbackResult cr1 = new CallbackResult(null, null, "javascript", oa);
                Map1.CallbackResults.Add(cr1);

    注意这里一般情况下如果项目里我们没有添加contextmenu的话那就肯定用Map1来生成的回调向服务器提交数据,但是项目里有了contextmenu后这么做就会影响到contextmenu,故而这里要改成Contextmenu1,写成 ContextMenu1.CallbackResults.Add(cr1);

    其他出现Map1.CallbackResults或者Map1.CallbackResults.ToString()的地方也要先添加这句ContextMenu1.CallbackResults.CopyFrom(Map1.CallbackResults);用来完成转换,然后把原来出现Map1.CallbackResults的地方替换成ContextMenu1.CallbackResults。

      然后你再编译运行,当你使用了原来是Map1回调处理的方法后就不会再发生click事件失去响应的问题了。如果你还有什么不懂得请加webgis开发群208785427,跟我们一起交流,by thsgar,小白。

  • 相关阅读:
    Spark2.0机器学习系列之12: 线性回归及L1、L2正则化区别与稀疏解
    Spark2.0机器学习系列之11: 聚类(幂迭代聚类, power iteration clustering, PIC)
    mysql 5.7.16多源复制
    Windows版 mysql 5.7.16安装
    一分钟经理人
    转 spring官方文档中文版
    MySQL执行计划 EXPLAIN参数
    sql 转 markdown
    Linux下安装MySQL5.6
    MyBatis完全使用指南
  • 原文地址:https://www.cnblogs.com/thsgar/p/3270800.html
Copyright © 2011-2022 走看看