国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

看看如何透過JavaScript調用C#函數

開發 后端
本文介紹了透過JavaScript調用C#函數,實現高速訪問數據庫、查找對應多個字段的值等相關知識。

本帖并無高來高去的高深技術,但提供一個做 ASP.NET 項目時,很實用的 Ajax 示例下載。透過 AJAX.NET 的功能,改善舊式 Callback 寫法的缺點,讓用戶在一或多個 TextBox 輸入完查找條件、鼠標離開并觸發 onBlur 事件時,透過JavaScript 調用C#自定義類的函數,實現高速訪問數據庫、查找對應多個字段的值。

之前我曾寫了一篇「用 ASP.NET Callback 和 JavaScript 高速訪問數據庫」,并提供示例下載,內容是用 Callback 異步調用技術 (ASP.NET AJAX 還沒出現前,微軟提供的過渡技術),讓 Client-side (JavaScript) 能和 Server-side (.NET CLR) 直接溝通,讓用戶在 TextBox 失去焦點、觸發 onBlur 事件時,能透過 C# 自定義類的函數,以相當高的效率訪問數據庫并返回值。但該示例有兩個缺點:

只能透過固定單一個內附的 RaiseCallbackEvent 函數,去訪問數據庫。當頁面上有多個 TextBox 同時要實現相同功能時,程序撰寫上會很困難。

無法透過 try-catch-finally block 捕捉錯誤信息。當發生錯誤時,也無法提供相關信息給用戶或程序員。

因為在 ASP.NET 項目中常會用到此一功能,因此日前我用 AJAX.NET 這套 free library 重寫了一個示例 (相關的 dll 已內附), 下載地址及功能如下:

本帖的示例代碼下載點:

http://files.cnblogs.com/WizardWu/090828.zip

(執行本示例,需要 SQL Server 的 Northwind 數據庫,以及 VS 2008 或 IIS)

此示例功能:

如下圖 1,在***個 TextBox1 輸入 EmployeeID,鼠標離開 TextBox1 失去焦點、觸發 onBlur 事件時,會自動高速訪問數據庫,取得該筆記錄的另外兩個字段,顯示在下方的兩個 TextBox 中。

如下圖 2,當用戶輸入不合理的 EmployeeID 時,會提示錯誤信息,并清空另外兩個 TextBox 里既有的文字。

當用戶輸入不存在于數據表 Employees 的 EmployeeID 時,會提示錯誤信息,并清空另外兩個 TextBox 里既有的文字。

當用戶手動清空 TextBox1,鼠標離開 TextBox1 失去焦點、觸發 onBlur 事件時,會清空另外兩個 TextBox 里既有的文字。 

透過JavaScript調用C#函數圖 1 

透過JavaScript調用C#函數圖 1 網站項目中常用到的功能。以本示例的做法,不論網頁上有多少個 TextBox 需要此功能,都不會相互干擾

 透過JavaScript調用C#函數圖 2 

透過JavaScript調用C#函數圖 2 輸入不合理或錯誤類型的 EmployeeID,JavaScript 接收到 C# 返回的錯誤信息

關鍵代碼如下:

  1. Default.aspx.cs   
  2.  
  3. public partial class _Default : System.Web.UI.Page   
  4. {  
  5.     protected void Page_Load(object sender, EventArgs e)  
  6.     {  
  7.         //設置 TextBox 的 OnBlur 事件被觸發時,所要調用的 JavaScript 函數  
  8.         this.TextBox1.Attributes["onblur"] = "getEmployeeInfo('TextBox1', 'TextBox2', 'TextBox3');";  
  9.         this.TextBox4.Attributes["onblur"] = "getProductInfo('TextBox4', 'TextBox5', 'TextBox6');";  
  10.  
  11.         //設置在 JavaScript 文件中,所能調用的 C# 自定義類的名稱   
  12.         Ajax.Utility.RegisterTypeForAjax(typeof(MyClass01));  
  13.     }  
  14. }  

我們看到上方,透過 RegisterTypeForAjax 函數,可向 AJAX.NET 注冊我們寫的 C# 自定義類 MyClass01。接著 AJAX.NET 會瀏覽這個自定義類,里面標示有 AjaxMethodAttribute 的函數,如下方代碼中的 getEmployeeInfo 和 getProductInfo 函數,我們并在這兩個函數里,實際去訪問數據庫并取回需要的一或多個字段的值。

  1. App_Code/MyClass01.cs  
  2. public class MyClass01  
  3. {  
  4.     public static string strConnString = WebConfigurationManager.ConnectionStrings["ConnString_SqlClient"].ConnectionString;  
  5.  
  6.     //由 EmployeeID (如: 1, 2 ,3 , ...),去數據庫取出他的 LastName、Title  
  7.     [Ajax.AjaxMethod()]       //告知 Ajax 封裝類,為此方法創建一個 JavaScript 代理,這樣才能被客戶端調用  
  8.     public string getEmployeeInfo(string strEmployeeID)  
  9.     {  
  10.         string strResult = string.Empty;  
  11.         string strSql = "SELECT LastName, Title FROM EMPLOYEES WHERE EmployeeID = @EmployeeID";  
  12.  
  13.         using (SqlConnection conn = new SqlConnection(strConnString))  
  14.         {  
  15.             conn.Open();  
  16.             if (conn.State == ConnectionState.Open)  
  17.             {  
  18.                 using (SqlCommand cmd = new SqlCommand(strSql, conn))  
  19.                 {  
  20.                     cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = strEmployeeID.Trim();  
  21.  
  22.                     //若確定要捉的記錄只有一筆,可加上此 ADO.NET 的「SingleRow」參數,以優化性能、節省系統資源  
  23.                     using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.SingleRow))  
  24.                     {  
  25.                         if (dr.Read())  
  26.                         {  
  27.                             strResult = dr[0].ToString() + "§" + dr[1].ToString();  
  28.                         }  
  29.                     }  
  30.                 }  
  31.             }  
  32.         }  
  33.  
  34.         return strResult;     //strResult = "result1§result2";   //返回值為用 "§" 字符所分割的一或多個字符串  
  35.     }  
  36.  
  37.  
  38.     //由 ProductID (如: 1, 2 ,3 , ...),去數據庫取出他的 ProductName、QuantityPerUnit  
  39.     [Ajax.AjaxMethod()]       //告知 Ajax 封裝類,為此方法創建一個 JavaScript 代理,這樣才能被客戶端調用  
  40.     public string getProductInfo(string strProductID)  
  41.     {  
  42.         //...中間略...  
  43.     }  
  44.  
  45. //end of class 

如下,onBlur 事件被觸發時,會在 JavaScript 里調用 C# 的同名函數,并從數據庫里取得返回值。

  1. js/MyJs01.js  
  2. //由 EmployeeID (如: 1, 2 ,3 , ...),去數據庫取出他的 LastName、Title  
  3. function getEmployeeInfo(TextBox1, TextBox2, TextBox3) {  
  4.  
  5.     //調用 App_Code 文件夾里,C# 自定義類的 getEmployeeInfo 函數  
  6.     var response = MyClass01.getEmployeeInfo(document.getElementById(TextBox1).value);  
  7.  
  8.     //response 為從 C# 自定義類里的函數所傳回來的,由一或多個 "§" 字符所組成的一個字符串  
  9.     if ((response.value == null) || (response.value.length == 0)) {  //若用戶輸入「不合理的字符」或「無對應數據的ID號碼」  
  10.         alert('數據庫里查無數據 !');  
  11.         document.getElementById(TextBox2).value = "";  
  12.         document.getElementById(TextBox3).value = "";  
  13.     }  
  14.     else if (response.value.length > 0) {      //若數據庫里有查找到對應的數據  
  15.         var strArrResult = response.value.split("§");  
  16.         if (strArrResult[0].length > 0)  
  17.             document.getElementById(TextBox2).value = strArrResult[0];  
  18.         if (strArrResult[1].length > 0)  
  19.             document.getElementById(TextBox3).value = strArrResult[1];  
  20.     }  

如下,在 web.config 里添加配置,讓所有 ajax/*.ashx 的請求,改由 Ajax.PageHandlerFactory 產生的 HTTP Handler 處理,而不再由默認的 System.Web.UI.PageHandlerFactory 處理程序工廠 [9] 來處理。

  1. web.config  
  2. < system.web> 
  3.     < httpHandlers> 
  4.         < add verb="POST,GET" path="ajax/*.ashx" 
  5.            type="Ajax.PageHandlerFactory, Ajax" /> 
  6.     < /httpHandlers> 
  7. < /system.web> 

因為此一需求我在 ASP.NET 項目常遇到,因此特地整理成一篇文章。若有網友知道 ASP.NET AJAX 3.5 有更好的做法,亦請留言告知。

到這里,透過JavaScript調用C#函數的相關內容就介紹完了。

【編輯推薦】

  1. 學習C#消息:循序漸進
  2. 解惑答疑:C#委托和事件
  3. 學習C#實現HTTP協議:多線程文件傳輸
  4. 進一步接觸C#委托與事件
  5. 淺析四種C#轉換的區別
責任編輯:book05 來源: cnblogs
相關推薦

2009-08-26 15:09:57

C# Hook

2009-07-31 14:26:38

JavaScript函C#函數

2009-08-19 14:26:58

C# JavaScri

2009-08-25 10:59:00

C#調用函數顯示值

2009-07-31 16:12:10

Windows APIC#

2009-08-07 17:22:36

C#調用dll導出函數

2009-08-14 09:15:28

C#調用構造函數

2009-08-03 13:34:57

C#調用Windows

2009-08-05 09:30:39

C#調用DLL函數

2009-08-05 09:40:02

C#調用DLL函數

2010-01-28 13:35:41

調用C++函數

2009-08-13 18:36:36

C#繼承構造函數

2009-08-17 16:18:47

C#調用CreateO

2009-07-31 14:47:22

JavaScript函C#

2009-08-31 10:28:00

C# CreateEm

2009-08-31 10:14:49

C# CreateEm

2009-08-31 09:59:13

C# CreateEm

2023-11-09 23:31:02

C++函數調用

2009-08-13 18:26:35

C#繼承構造函數

2009-08-19 04:16:00

C#代碼與#函數相互調
點贊
收藏

51CTO技術棧公眾號

成人免费91在线看| 亚洲色图第三页| 日韩亚洲在线观看| 欧美人与动牲交xxxxbbbb| a级片在线免费| 日本不卡免费播放| 日韩中文在线电影| 精品一区二区三| 17c精品麻豆一区二区免费| 欧美高清视频免费观看| 成人亚洲视频在线观看| 中文字幕一区二区三区中文字幕 | 亚洲欧洲精品一区二区| 国产精品13p| 成人午夜电影网站| 欧美一区二粉嫩精品国产一线天| 德国一级在线视频| 99综合在线| 日韩av有码在线| 粉嫩虎白女毛片人体| 日本欧美国产| 国产精品视频网站| 牛牛在线精品视频| av不卡在线播放| 97久久伊人激情网| 在线视频资源站| 奶水喷射视频一区| 在线视频国产日韩| 日本18视频网站| 极品中文字幕一区| 神马国产精品影院av| 四色成人av永久网址| 男女性色大片免费观看一区二区| 美日韩在线视频| 亚洲最新合集| 精品一二三四区| 韩国精品久久久999| 欧美jizz19性欧美| 欧美日韩不卡在线| av五月天在线| 一区二区三区国产在线| 色阁综合av| 色婷婷综合久久久久久| 欧美日精品一区视频| 成人免费播放器| 欧美日本久久| 高清视频欧美一级| 欧洲一区二区三区| 中文字幕不卡av| 香蕉精品久久| 九色综合日本| 蜜桃国内精品久久久久软件9| 亚洲激情在线视频| 玖草视频在线| 91.麻豆视频| 国产无遮挡在线视频免费观看| 欧美三级xxx| 日本在线视频www| 亚洲三级在线观看| 国产乱淫av片杨贵妃| 欧美涩涩网站| 国产高清精品软男同| 欧美黄色精品| 久久99精品久久久久久青青91| 成人在线免费看黄| 欧美日韩国产丝袜另类| 国产区二区三区| 国产一区不卡视频| 国产无套精品一区二区| 果冻天美麻豆一区二区国产| 亚洲欧美在线观看| 国产玉足榨精视频在线观看| 亚洲国产精华液网站w| 日韩欧美一级在线| 日韩激情一区二区| 肥熟一91porny丨九色丨| 丁香天五香天堂综合| 中文在线二区| 中文亚洲视频在线| 好看不卡的中文字幕| 浅井舞香一区二区| 欧美亚洲福利| 亚洲精品电影网| 国产不卡一二三区| 97在线免费视频| 欧美无毛视频| 日韩精品资源二区在线| 永久免费av在线| 欧美性色视频在线| 祥仔av免费一区二区三区四区| 国产精品9999久久久久仙踪林| 99视频精品全部免费在线| av小片在线| 欧美综合亚洲图片综合区| 午夜电影福利| 亚洲青青青在线视频| 日本性爱视频在线观看| 欧美性xxxxhd| 久久av网站| 国模视频一区二区| 日韩福利视频网| 毛片免费在线| 欧美日韩国产天堂| 精品国产精品国产偷麻豆| 男女日批视频在线观看| 91精品婷婷国产综合久久竹菊| 狠狠操综合网| 亚洲欧美另类动漫| 亚洲女人天堂av| 男人皇宫亚洲男人2020| 国产九区一区在线| 亚洲人成免费| 亚洲精品不卡在线| 美女隐私在线观看| 色悠悠亚洲一区二区| 中文字幕毛片| 五月激情综合网| ckplayer中文字幕| 日韩在线观看免费高清| 日本视频一区二区| 亚洲天堂第一区| 欧美一区二区三区免费视频| а天堂中文在线官网| 国产一区二中文字幕在线看| 国产精品久久久久久麻豆一区软件 | 欧美日本国产视频| 久久激情电影| 国产综合精品一区二区三区| 亚洲另类色综合网站| 天天噜天天色| 91精品国产99久久久久久| 国产欧美一区二区精品仙草咪| 粗大的内捧猛烈进出在线视频| 欧美成人免费播放| 91丨porny丨国产| www.男人的天堂.com| 国产综合在线看| 久久九九全国免费| 在线观看h视频| 欧美福利在线播放| 亚洲国产精品字幕| 国产精品久久久久久福利一牛影视| 欧美三级理伦电影| 黄色免费在线播放| 麻豆app在线观看| 国产精品久久久久久久久免费樱桃 | 色综合咪咪久久| 欧美三级日韩在线| 欧美α欧美αv大片| 国模吧视频一区| 自拍偷拍欧美专区| 国产精品二线| 久久久久久亚洲精品不卡4k岛国| 国产精品精品一区二区三区午夜版 | 日韩色淫视频| 最大av网站| 在线视频毛片| 99精品老司机免费视频| 国产一级片在线| 97超碰在线公开在线看免费| r级无码视频在线观看| 明星乱亚洲合成图.com| 中文字幕精品一区久久久久| 最近的2019中文字幕免费一页| 久久大大胆人体| 亚洲欧美日本精品| 欧美亚洲成人xxx| 青青草原成人| 欧美草草影院在线视频| 亚洲香蕉av在线一区二区三区| 国产精品亚洲一区二区三区在线 | 欧美大香线蕉线伊人久久| 亚洲欧美自拍一区| 国产综合视频在线观看| 久久久久久人妻一区二区三区| 在线麻豆国产传媒1国产免费| 男人的天堂免费在线视频| 日韩亚洲欧美一区二区| 污黄视频在线看| 日本一区二区三区电影免费观看| 调教视频在线观看| 久久69成人| 成年人在线观看| 亚州黄色一级| 日韩一区二区三区精品| 亚洲黄色在线| 婷婷夜色潮精品综合在线| www.欧美免费| www.午夜色| а√中文在线8| 综合精品一区| 在线观看日韩一区| 日本久久久久久久久| 欧美激情xxxxx| www.日本少妇| 亚洲狼人综合| 欧美a一欧美| 亚洲欧美视频一区| 日韩美女在线看| 中文官网资源新版中文第二页在线观看|