本帖并無高來高去的高深技術(shù),但提供一個(gè)做 ASP.NET 項(xiàng)目時(shí),很實(shí)用的 Ajax 示例下載。透過 AJAX.NET 的功能,改善舊式 Callback 寫法的缺點(diǎn),讓用戶在一或多個(gè) TextBox 輸入完查找條件、鼠標(biāo)離開并觸發(fā) onBlur 事件時(shí),透過JavaScript 調(diào)用C#自定義類的函數(shù),實(shí)現(xiàn)高速訪問數(shù)據(jù)庫、查找對(duì)應(yīng)多個(gè)字段的值。 之前我曾寫了一篇「用 ASP.NET Callback 和 JavaScript 高速訪問數(shù)據(jù)庫」,并提供示例下載,內(nèi)容是用 Callback 異步調(diào)用技術(shù) (ASP.NET AJAX 還沒出現(xiàn)前,微軟提供的過渡技術(shù)),讓 Client-side (JavaScript) 能和 Server-side (.NET CLR) 直接溝通,讓用戶在 TextBox 失去焦點(diǎn)、觸發(fā) onBlur 事件時(shí),能透過 C# 自定義類的函數(shù),以相當(dāng)高的效率訪問數(shù)據(jù)庫并返回值。但該示例有兩個(gè)缺點(diǎn): 只能透過固定單一個(gè)內(nèi)附的 RaiseCallbackEvent 函數(shù),去訪問數(shù)據(jù)庫。當(dāng)頁面上有多個(gè) TextBox 同時(shí)要實(shí)現(xiàn)相同功能時(shí),程序撰寫上會(huì)很困難。 無法透過 try-catch-finally block 捕捉錯(cuò)誤信息。當(dāng)發(fā)生錯(cuò)誤時(shí),也無法提供相關(guān)信息給用戶或程序員。 因?yàn)樵?ASP.NET 項(xiàng)目中常會(huì)用到此一功能,因此日前我用 AJAX.NET 這套 free library 重寫了一個(gè)示例 (相關(guān)的 dll 已內(nèi)附), 下載地址及功能如下: 本帖的示例代碼下載點(diǎn): http://files.cnblogs.com/WizardWu/090828.zip (執(zhí)行本示例,需要 SQL Server 的 Northwind 數(shù)據(jù)庫,以及 VS 2008 或 IIS) 此示例功能: 如下圖 1,在第一個(gè) TextBox1 輸入 EmployeeID,鼠標(biāo)離開 TextBox1 失去焦點(diǎn)、觸發(fā) onBlur 事件時(shí),會(huì)自動(dòng)高速訪問數(shù)據(jù)庫,取得該筆記錄的另外兩個(gè)字段,顯示在下方的兩個(gè) TextBox 中。 如下圖 2,當(dāng)用戶輸入不合理的 EmployeeID 時(shí),會(huì)提示錯(cuò)誤信息,并清空另外兩個(gè) TextBox 里既有的文字。 當(dāng)用戶輸入不存在于數(shù)據(jù)表 Employees 的 EmployeeID 時(shí),會(huì)提示錯(cuò)誤信息,并清空另外兩個(gè) TextBox 里既有的文字。 當(dāng)用戶手動(dòng)清空 TextBox1,鼠標(biāo)離開 TextBox1 失去焦點(diǎn)、觸發(fā) onBlur 事件時(shí),會(huì)清空另外兩個(gè) TextBox 里既有的文字。 透過JavaScript調(diào)用C#函數(shù)圖 1 網(wǎng)站項(xiàng)目中常用到的功能。以本示例的做法,不論網(wǎng)頁上有多少個(gè) TextBox 需要此功能,都不會(huì)相互干擾 透過JavaScript調(diào)用C#函數(shù)圖 2 輸入不合理或錯(cuò)誤類型的 EmployeeID,JavaScript 接收到 C# 返回的錯(cuò)誤信息 關(guān)鍵代碼如下:
我們看到上方,透過 RegisterTypeForAjax 函數(shù),可向 AJAX.NET 注冊(cè)我們寫的 C# 自定義類 MyClass01。接著 AJAX.NET 會(huì)瀏覽這個(gè)自定義類,里面標(biāo)示有 AjaxMethodAttribute 的函數(shù),如下方代碼中的 getEmployeeInfo 和 getProductInfo 函數(shù),我們并在這兩個(gè)函數(shù)里,實(shí)際去訪問數(shù)據(jù)庫并取回需要的一或多個(gè)字段的值。
如下,onBlur 事件被觸發(fā)時(shí),會(huì)在 JavaScript 里調(diào)用 C# 的同名函數(shù),并從數(shù)據(jù)庫里取得返回值。
如下,在 web.config 里添加配置,讓所有 ajax/*.ashx 的請(qǐng)求,改由 Ajax.PageHandlerFactory 產(chǎn)生的 HTTP Handler 處理,而不再由默認(rèn)的 System.Web.UI.PageHandlerFactory 處理程序工廠 [9] 來處理。
因?yàn)榇艘恍枨笪以?ASP.NET 項(xiàng)目常遇到,因此特地整理成一篇文章。若有網(wǎng)友知道 ASP.NET AJAX 3.5 有更好的做法,亦請(qǐng)留言告知。 到這里,透過JavaScript調(diào)用C#函數(shù)的相關(guān)內(nèi)容就介紹完了。 |
|