ArcGIS Web 應用程式開發架構(ADF)中的Ajax

來源:互聯網
上載者:User
        我希望各位看官在看這篇文章之前,先對.NET中內建的Ajax瞭解較透,如果還不是很明白,建議先看我的上一篇博文.NET內建的Ajax工作原理

        ESRI ArcGIS Server 9.2 的web應用開發架構充分利用了ASP.NET中的回調技術。我們來看看利用Visual Studio 模板建立的預設應用程式中如何利用回調的。

        首先看到預設的首頁面Default.aspx 對應的類 WebMapApplication 實現了 ICallbackEventHandler 介面。        我們再以Identify工具來深入瞭解應用開發架構。        在 WebMapApplication 類的 Load 事件處理器中,調用 new MapIdentify(Map1) 初始化Identify 工具。在 MapIdentify 類的建構函式中,調用了SetupIdentify 方法。該方法首先通過調用 GetCallbackEventReference 方法來產生用戶端指令碼,然後調用 RegisterClientScriptBlock 註冊一個名為 identifyCallbackFunctionString 的 JavaScript 函數,該函數中調用產生的用戶端指令碼。        在 display_mapidentify.js 檔案的 MapIdClick 函數(Identify 事件處理器)中調用了 identifyCallbackFunctionString 函數,從而觸發了 WebMapApplication 類的 RaiseCallbackEvent 方法。        RaiseCallbackEvent  方法不僅需要處理 Identify 工具,還需要處理其他工具,本執行個體中包括關閉應用程式與擷取著作權文本。為了在該方法中判斷是哪個工具啟動了該方法調用,需要在傳入在參數中包含表明調用“身份”。同時由於在傳入參數中還需要其他可能更多的資訊,例如Identify工具,不僅需要表明調用者身份的資訊,還需要目前使用者單擊處 X、Y 座標資訊。為了能在RaiseCallbackEvent  方法中把這些資訊都解釋出來,本執行個體使用的是        "參數名1=參數值1&參數名2=參數值2"式。例如在 MapIdClick 函數中傳入的是        "ControlID=Map1&ControlType=Map&EventArg=MapIdentify&Map1_mode=MapIdentify&minx="+zleft+"&miny="+ztop而在 RaiseCallbackEvent 方法(或者是 RaiseCallbackEvent 中調用的 一個webservice方法,一個自訂類方法),通過調用 Split("&".ToCharArray ()) 方法將各個 “參數名=參數值” 放置到一組數組中,然後再通過建立雜湊表的方式把“參數名” 與 “參數值” 分開,具體的代碼如下:            string[] keyValuePairs;//含有”=“的數組
            string[] keyValue;//只有字串的數組
            NameValueCollection m_queryString = new NameValueCollection ();//索引值對的集合

             keyValuePairs = eventArgument.Split("&".ToCharArray ());//eventArgument是用戶端傳入的參數
             if (keyValuePairs.Length > 0)//如果傳遞的參數是argA=arg1&argB=arg2……形式的,也就是說參數不止一個
             {
                 for (int i = 0; i < keyValuePairs.Length; i++)
                 {
                     keyValue = keyValuePairs.GetValue(i).ToString().Split("=".ToCharArray());
                      m_queryString .Add(keyValue[0], keyValue[1]);
                 }
             }
             else//傳遞的參數只有一個
             {
                 keyValue = eventArgument.Split("=".ToCharArray());
                 if (keyValue.Length > 0)//如果有參數傳遞過來的話
                 {
                      m_queryString .Add(keyValue[0], keyValue[1]);
                 }
             }
             //通過htQueryString["EventArg"]這種方式調用參數的值
             return "您選擇的工具名稱是: " + m_queryString ["EventArg"].ToString() ;        通過執行上訴的代碼後,只需要調用m_queryString ["EventArg"]就能判斷是哪個工具啟動該方法的調用。如果是 Identify 工具,那麼該值就為 MapIdentify 。        在判斷出調用工具是 Identify 後, RaiseCallbackEvent 方法調用 MapIdentify 類的 Identify 方法得到傳回值。
        通過解析 Arcserver ADF 中的 Ajax ,就不難理解為什麼利用 ArcServer ADF 開發的 webgis 產品中地圖的重新整理是如此之快了。。。。。。。。。。。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.