一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

看看如何透過JavaScript調(diào)用C#函數(shù) - 51CTO.COM

 大卷風(fēng) 2010-10-04
    本文介紹了透過JavaScript調(diào)用C#函數(shù),實(shí)現(xiàn)高速訪問數(shù)據(jù)庫、查找對(duì)應(yīng)多個(gè)字段的值等相關(guān)知識(shí)。

    本帖并無高來高去的高深技術(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 

    透過JavaScript調(diào)用C#函數(shù)圖 1 網(wǎng)站項(xiàng)目中常用到的功能。以本示例的做法,不論網(wǎng)頁上有多少個(gè) TextBox 需要此功能,都不會(huì)相互干擾

    透過javascript調(diào)用c#函數(shù)圖 2 

    透過JavaScript調(diào)用C#函數(shù)圖 2 輸入不合理或錯(cuò)誤類型的 EmployeeID,JavaScript 接收到 C# 返回的錯(cuò)誤信息

    關(guān)鍵代碼如下:

            
    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.         //設(shè)置 TextBox 的 OnBlur 事件被觸發(fā)時(shí),所要調(diào)用的 JavaScript 函數(shù)  
    8.         this.TextBox1.Attributes["onblur"] = "getEmployeeInfo('TextBox1', 'TextBox2', 'TextBox3');";  
    9.         this.TextBox4.Attributes["onblur"] = "getProductInfo('TextBox4', 'TextBox5', 'TextBox6');";  
    10.  
    11.         //設(shè)置在 JavaScript 文件中,所能調(diào)用的 C# 自定義類的名稱   
    12.         Ajax.Utility.RegisterTypeForAjax(typeof(MyClass01));  
    13.     }  
    14. }  

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

            
    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 , ...),去數(shù)據(jù)庫取出他的 LastName、Title  
    7.     [Ajax.AjaxMethod()]       //告知 Ajax 封裝類,為此方法創(chuàng)建一個(gè) JavaScript 代理,這樣才能被客戶端調(diào)用  
    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」參數(shù),以優(yōu)化性能、節(jié)省系統(tǒng)資源  
    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";   //返回值為用 "§" 字符所分割的一或多個(gè)字符串  
    35.     }  
    36.  
    37.  
    38.     //由 ProductID (如: 1, 2 ,3 , ...),去數(shù)據(jù)庫取出他的 ProductName、QuantityPerUnit  
    39.     [Ajax.AjaxMethod()]       //告知 Ajax 封裝類,為此方法創(chuàng)建一個(gè) JavaScript 代理,這樣才能被客戶端調(diào)用  
    40.     public string getProductInfo(string strProductID)  
    41.     {  
    42.         //...中間略...  
    43.     }  
    44.  
    45. //end of class 

    如下,onBlur 事件被觸發(fā)時(shí),會(huì)在 JavaScript 里調(diào)用 C# 的同名函數(shù),并從數(shù)據(jù)庫里取得返回值。

            
    1. js/MyJs01.js  
    2. //由 EmployeeID (如: 1, 2 ,3 , ...),去數(shù)據(jù)庫取出他的 LastName、Title  
    3. function getEmployeeInfo(TextBox1, TextBox2, TextBox3) {  
    4.  
    5.     //調(diào)用 App_Code 文件夾里,C# 自定義類的 getEmployeeInfo 函數(shù)  
    6.     var response = MyClass01.getEmployeeInfo(document.getElementById(TextBox1).value);  
    7.  
    8.     //response 為從 C# 自定義類里的函數(shù)所傳回來的,由一或多個(gè) "§" 字符所組成的一個(gè)字符串  
    9.     if ((response.value == null) || (response.value.length == 0)) {  //若用戶輸入「不合理的字符」或「無對(duì)應(yīng)數(shù)據(jù)的ID號(hào)碼」  
    10.         alert('數(shù)據(jù)庫里查無數(shù)據(jù) !');  
    11.         document.getElementById(TextBox2).value = "";  
    12.         document.getElementById(TextBox3).value = "";  
    13.     }  
    14.     else if (response.value.length > 0) {      //若數(shù)據(jù)庫里有查找到對(duì)應(yīng)的數(shù)據(jù)  
    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 的請(qǐng)求,改由 Ajax.PageHandlerFactory 產(chǎn)生的 HTTP Handler 處理,而不再由默認(rèn)的 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> 

    因?yàn)榇艘恍枨笪以?ASP.NET 項(xiàng)目常遇到,因此特地整理成一篇文章。若有網(wǎng)友知道 ASP.NET AJAX 3.5 有更好的做法,亦請(qǐng)留言告知。

    到這里,透過JavaScript調(diào)用C#函數(shù)的相關(guān)內(nèi)容就介紹完了。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美午夜不卡在线观看| 麻豆tv传媒在线观看| 青青操在线视频精品视频| 久久精品国产亚洲av麻豆| 麻豆视传媒短视频免费观看| 亚洲男人天堂网在线视频| 欧美精品激情视频一区| 最近的中文字幕一区二区| 欧美亚洲综合另类色妞| 欧美不卡午夜中文字幕| 久久夜色精品国产高清不卡| 国产激情一区二区三区不卡| 欧美自拍偷自拍亚洲精品| 日韩免费午夜福利视频| 久久亚洲精品中文字幕| 国产精品日韩欧美一区二区| 午夜国产精品国自产拍av| 91人妻人人做人碰人人九色| 亚洲女同一区二区另类| 懂色一区二区三区四区| 亚洲精品深夜福利视频| 亚洲国产精品久久网午夜| 亚洲精品偷拍一区二区三区| 国产一区二区在线免费| 在线观看国产午夜福利| 久久国产精品熟女一区二区三区| 国产精品午夜小视频观看| 亚洲国产av精品一区二区| 91亚洲国产日韩在线| 能在线看的视频你懂的| 在线日韩欧美国产自拍| 偷拍洗澡一区二区三区| 亚洲二区欧美一区二区| 高清一区二区三区四区五区| 偷拍美女洗澡免费视频| 亚洲欧美日韩国产自拍| 日本丁香婷婷欧美激情| 人妻少妇av中文字幕乱码高清| 欧美丝袜诱惑一区二区| 国产精品福利精品福利| 99久热只有精品视频最新|