使用ASP.NET AJAX框架擴展HTML Map控件(3)_.Net教程
推薦:ASP.NET調用oracle存儲過程實現快速分頁《使用 ADO.NET 訪問 Oracle 9i 存儲過程》見下面的介紹(如果對這個不怎么懂的,還是先看看下面文章) http://www.microsoft.com/china/MSDN/library/data/dataAccess/DMSDNorsps.mspx 包
這兩個參數都將用于描述在頁面顯示的彈出窗口。另外兩個私有變量_xAxis和_yAxis用于描述彈出窗口的顯示位置。典型情況下,我們最好在構造器中聲明所有的私有成員。
接下來,我們將使用原型設計模式編寫該類中的成員函數和屬性:
| 以下為引用的內容: MyServices.Location.prototype = { get_uiElement: function() { return this._uiElement; }, set_uiElement: function(value) { this._uiElement = value; }, get_uiBody: function() { return this._uiBody; }, set_uiBody: function(value) { this._uiBody = value; }, |
注意,這里的UI元素屬性方法的定義方式非常類似于.NET中各種語言中的定義形式。
下面的成員函數是我們的重點,它負責調用遠程的Web服務:
| 以下為引用的內容: ShowPopupinfo: function(event, areaName) { MyServices.LocationService.GetAreaInfo(areaName, Function.createDelegate(this, this.OnCompleted), this.OnError, //負責進行錯誤處理的回叫函數 this.OnTimeOut); //負責進行超時處理的回叫函數 this._xAxis = event.clientX; this._yAxis = event.clientY; } |
上面的代碼展示的是非常典型的從客戶端調用Web服務的方法:
1)形式與調用一個普通的本地方法幾乎一樣方便;
2)Function.createDelegate函數是ASP.NET AJAX客戶端開發中的極為重要的全局函數。創建此函數的原始目的之一是解決this關鍵字的問題。在一個由一個DOM元素引發的事件處理器中,this關鍵字總是引用此DOM元素而不是類本身。但在此,我們使用這個函數的理由是,使得AJAX環境在與激發Web服務的相同的類實例中調用成功時的回叫函數。當你需要引用客戶端類的屬性和方法時,這是相當重要的。簡言之,使用此函數將使得訪問調用Web服務的客戶端類的屬性和方法安全而準確。否則,進行異步調用的客戶端類實例將為null,因為Web服務的響應是在另一個不同的上下文中執行的—這個上下文不再等同于發出異步Web調用請求的那個上下文。
3)有意思的是,這里的GetAreaInfo方法并不是我們在前面創建的Web服務中的那個,而是屬于在運行時刻創建的Web服務代理類—此代理類作為一個客戶端代理訪問服務器端的ASMX Web服務。
上面ShowPopupInfo函數中的最后兩行代碼中,使用事件的輸入參數設置兩個私有變量xAxis和yAxis的值。我們在此的目的是,在與用戶點擊位置盡可能近的地方顯示彈出窗口。
下面是調用成功時對應的回叫函數的實現代碼:
| 以下為引用的內容: OnCompleted: function(result, userContext, methodName) { var uiElement = $get(this.get_uiElement()); var uiBody = $get(this.get_uiBody()); if (uiBody != null) { var textNode = uiBody.firstChild; if (!textNode) { textNode = document.createTextNode(result); uiBody.appendChild(textNode); } else { textNode.nodeValue = result; } if (uiElement != null) { uiElement.style.visibility = "visible"; uiElement.style.display = "inline"; uiElement.style.left = this._xAxis "px"; uiElement.style.top = this._yAxis "px"; } } }, |
內容相當簡單—把從服務器端返回的數據設置為彈出窗口的顯示內容并根據情況確保顯示此窗口。
在創建客戶端類的最后,我們還必須告訴AJAX框架在客戶端注冊之,以便可以從客戶端訪問它:
| 以下為引用的內容: MyServices.Location.registerClass("MyServices.Location"); 至此,客戶端類MyServices.Location已經成功創建。那么,如何使用它呢? 首先,我們需要在頁面加載時定義客戶端類的一個新的實例。為此,我們需要在pageLoad函數中編程:
|
其它幾個工具函數比較簡單,在此不再贅述。
五、總結
在本文中,我向你展示了如何通過創建一個AJAX服務和創建自己定制的客戶端類來擴展HTML Map控件。在擴展后的控件中,當點擊圖像中的某個區域時,我們可以通過新型的AJAX方式來給出相關細節信息,而不必刷新整個Web頁面。盡管在大部分Web應用中我們較少應用到這種Map控件(也許因此VS2005工具欄中省略之),但如果開發大量圖片、圖像及地圖操作相關的Web應用時,基于本文AJAX改造后的Map控件一定會讓你的Web應用更加絢爛多彩。
【附】本文源碼調試環境:Windows XP專業版 Visual Studio 2005 ASP.NET AJAX 1.0。
本文收集整理自互聯網,若您是原文作者,請來信更改作者及出處Post#vip.qq.com(把#改為@)
分享:復雜ASP.NET服務器控件調整小技巧在創建或修改布局復雜ASP.NET服務器端控件時,大量的時間都是在編譯,等待JIT,修改,編譯,JIT... 這樣一個循環中,而且兩個編譯常常還很耗費時間。特別地,當控件已集成在頁面之中后,在出現
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發送Email實例(可帶附件)
- js實現廣告漂浮效果的小例子
- asp.net Repeater 數據綁定的具體實現
- Asp.Net 無刷新文件上傳并顯示進度條的實現方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)
- asp.net頁面傳值測試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-使用ASP.NET AJAX框架擴展HTML Map控件(3)
。