国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net中javascript與后臺c#交互

2024-07-10 13:29:34
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了asp.net中javascript與后臺c#交互,需要的朋友可以參考下

最近做一個小項目,網頁中嵌入google maps,輸入經緯度坐標可以定位地圖位置并加注標記,點擊標記獲取遠端攝像頭數據并在視頻窗口實現播放。在實際操作過程中,由于經緯度數據和視頻登錄的用戶名密碼數據均要從后臺數據庫中提取,而第三版的google maps api又是在javascript中實現的,因此不可避免的需要前端腳本與后臺進行交互。由于是在asp.net中實現,故問題演化成asp.net中javascript與后臺c#如何進行交互。

C#代碼與javaScript函數的相互調用主要有四個方面:

1.如何在JavaScript訪問C#函數?

2.如何在JavaScript訪問C#變量?

3.如何在C#中訪問JavaScript的已有變量?

4.如何在C#中訪問JavaScript函數?

一、javaScript函數中執行C#代碼中的函數: 方法一:頁面和頁面類結合

1、函數聲明為public

后臺代碼(把public改成protected也可以)

 

  1. public string ss() 
  2.  
  3.  
  4. return("a"); 
  5.  

2、在html里用<%=ss()%>可以調用//是C#中后臺的函數名稱

前臺腳本

 

 
  1. <script language=javascript> 
  2.  
  3. var a = "<%=ss()%>";//JavaScript中調用C#后臺的函數 
  4.  
  5. alert(a); 
  6.  
  7. </script>  

方法二: JavaScript異步調用定義在ASP.Net頁面中的方法

1.將該方法聲明為公有(public);

2.將該方法聲明為類方法(C#中的static,VB.NET中的Shared),而不是實例方法;

3.將該方法添加【WebMethod】屬性

4.將頁面中ScriptManager控件的EnablePageMethods屬性設置為true;

5.在客戶端使用如下JavaScript語法調用該頁面方法

PageMethods.[MethodName](param1,param2,...,callbackFunction);

6.為客戶端異步調用指定回調函數,在回調函數中接受返回值并進一步處理;

7.添加 using System.Web.Services;

示例:

前臺JavaScript代碼

 

 
  1. <html xmlns="http://www.w3.org/1999/xhtml"
  2. <head runat="server"
  3. <title>無標題頁</title> 
  4.  
  5. <script type="text/javascript"
  6. function JsCallCSharp(param1) 
  7. {  
  8. PageMethods.sayhell(param1,onSayHelloSucceeded);//sayhell是后臺標注了【webMethod】屬性的方法 param1是傳入該方法的參數,onSayHelloSucceeded是回調函數主要是對后臺返回的結果進一步處理 
  9. }  
  10. function onSayHelloSucceeded(result)//綁定的回調函數  
  11. {  
  12. alert(result); 
  13. }  
  14.  
  15. </script> 
  16.  
  17. </head> 
  18. <body> 
  19. <form id="form1" runat="server"
  20. <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">//ScriptManager控件管理腳本的,注意設置EnablePageMethods="true"此屬性 
  21. </asp:ScriptManager> 
  22. <div> 
  23. <input type="button" onclick="JsCallCSharp('hello')" /> 
  24. </div> 
  25. </form> 
  26. </body> 
  27. </html> 

后臺代碼(.cs文件)

 

 
  1. using System; 
  2. using System.Configuration; 
  3. using System.Data; 
  4. using System.Linq; 
  5. using System.Web; 
  6. using System.Web.Security; 
  7. using System.Web.UI; 
  8. using System.Web.UI.HtmlControls; 
  9. using System.Web.UI.WebControls; 
  10. using System.Web.UI.WebControls.WebParts; 
  11. using System.Xml.Linq; 
  12. using System.Web.Services;//添加web服務引用 
  13.  
  14. public partial class _Default : System.Web.UI.Page 
  15. protected void Page_Load(object sender, EventArgs e) 
  16.  
  17.  
  18. [WebMethod]//標示為web服務方法屬性 
  19. public static string sayhell(string say)//注意函數的修飾符,只能是靜態的 
  20. return say; 

方法三: JavaScript異步調用定義在Web服務類中的方法

1.添加一個web服務標示該服務為 允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務

對應屬性為[System.Web.Script.Services.ScriptService]

2.將該方法聲明public并將該方法標示為[webMethod]屬性方法

3.在頁面中ScriptManager控件并添加web服務引用

4.在客戶端使用如下JavaScript語法調用web服務方法

WebService.HelloWorld("helloWord",function(res)//Webservice是web服務頁面名稱

HelloWord為web服務頁面類中的方 法,function為回調JavaScript函數主要是處理返回的結果 { alert(res); });

示例:

頁面代碼

 

 
  1. <html xmlns="http://www.w3.org/1999/xhtml"
  2. <head runat="server"
  3. <title>無標題頁</title> 
  4.  
  5. <script type="text/javascript"
  6. function JsCallCSharp(param1) 
  7. {  
  8. PageMethods.sayhell(param1,onSayHelloSucceeded); 
  9. }  
  10. function onSayHelloSucceeded(result) 
  11. {  
  12. alert(result); 
  13. }  
  14.  
  15. //該方法為調用的函數 
  16. function JsCallWebService() 
  17. WebService.HelloWorld("helloWord",function(res)//調用web服務 
  18. alert(res); 
  19. }); 
  20. </script> 
  21.  
  22. </head> 
  23. <body> 
  24. <form id="form1" runat="server"
  25. <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" > 
  26. <Services><asp:ServiceReference Path="~/WebService.asmx" /></Services>//注意要引用web服務 
  27. </asp:ScriptManager> 
  28. <div> 
  29. <input type="button" onclick="JsCallCSharp('hello')" value="測試C#后臺頁" /> 
  30. <input type="button" onclick="JsCallWebService()" value="測試web后臺類" /> 
  31. </div> 
  32. </form> 
  33. </body> 
  34. </html> 

web服務后臺代碼

 

 
  1. using System; 
  2. using System.Collections; 
  3. using System.Linq; 
  4. using System.Web; 
  5. using System.Web.Services; 
  6. using System.Web.Services.Protocols; 
  7. using System.Xml.Linq; 
  8.  
  9. /// <summary> 
  10. ///WebService 的摘要說明 
  11. /// </summary> 
  12. [WebService(Namespace = "http://tempuri.org/")] 
  13. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
  14. //若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的注釋。  
  15. [System.Web.Script.Services.ScriptService]//注意要添加該標示 
  16. public class WebService : System.Web.Services.WebService { 
  17.  
  18. public WebService () { 
  19.  
  20. //如果使用設計的組件,請取消注釋以下行  
  21. //InitializeComponent();  
  22.  
  23. [WebMethod]//方法要標示的屬性 
  24. public string HelloWorld(string result) { 
  25. return result; 
  26.  

二、JavaScript訪問C#變量

方法一:

a、通過頁面上隱藏域訪問,可以在后臺把c#變量值保存到隱藏文本域當中。

b、然后在前臺javascript當中直接取隱藏文本域的值。

document.getElementByIdx_x('xx').value

方法二:

a、在服務器端變量賦值后在頁面注冊腳本

Page.RegisterStartScript(" ","");

value是后臺變量,然后javascript中可以直接訪問vary值,它的值就是后臺變量value的值,這種方式只不過是能過一種間接的方式來訪問c#變量。

三、C#中訪問JavaScript的已有變量

方法一:

前臺使用服務器文本控件隱藏域,將js變量值寫入其中;后臺直接通過控件id訪問和調用,即后臺用Request["id"]來獲取值。

方法二:

可以用cookie或session存儲變量值,后臺直接使用

使用session以下是代碼片段:

 

 
  1. .cs  
  2. if (Session["siteName"] == null)//判斷是否存在指定Key值的Session變量  
  3. Session["siteName"] = "";//如果不存在則創建Session變量  
  4. //給Session["siteName"]變量賦值  
  5. .aspx  
  6. var siteName="<%=Session["siteName"] %>"

四、C#代碼執行JavaScript函數和調用JavaScript函數

方法一:C#中使用ScriptManager.RegisterStartupScript(this, this.GetType(), "edit", "CSharpCallJs('"+param1+"','"+param2+"')",

示例:

腳本函數

 

 
  1. function CSharpCallJs(param1,param2)  
  2. {  
  3. alert(param1 + param2);  
  4. }  

頁面后臺代碼

 

 
  1. ScriptManager.RegisterStartupScript(thisthis.GetType(), "edit""CSharpCallJs('" + param1 + "','" + param2 + "');"true);//關鍵代碼調用頁面腳本函數的代碼 

方法二:使用隱藏域或者Literal控件,在前臺使用js腳本把一些js函數控制的值寫進隱藏域或者Literal控件,然后前臺使用Hidden.Value或者Literal.Text讀取前臺值。

以下是代碼片段:

 

 
  1. .aspx  
  2.  function GetTitleID(obj)  
  3.  {  
  4.  sTitleID=obj  
  5.  if(sTitleID!=null)  
  6.  document.getElementByIdx_x("HiddenField1").value=type+','+sTitleID;  
  7.  else 
  8.  document.getElementByIdx_x("HiddenField1").value=type+',0';  
  9.  }  
  10.  .cs  
  11.  string hiddenValue = this.HiddenField1.Value; 

方法三:Page.RegisterStartupScript("function","");

以上就是asp.net中javascript與后臺c#交互的方法,每一種情況都有對應的解決方法,希望能夠幫助到大家。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 常熟市| 正阳县| 若羌县| 葫芦岛市| 南和县| 宝应县| 宝坻区| 西藏| 金堂县| 丹东市| 石台县| 和平县| 芮城县| 和平县| 鄄城县| 巨野县| 大连市| 新疆| 上蔡县| 凤翔县| 晋江市| 铁岭市| 吐鲁番市| 景宁| 苏尼特左旗| 株洲市| 青岛市| 太谷县| 黄骅市| 岢岚县| 定日县| 普定县| 万安县| 礼泉县| 常山县| 高尔夫| 韩城市| 石楼县| 乳山市| 白水县| 准格尔旗|