C#和JS相互交互


C#代碼與javaScript函數的相互調用:

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

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

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

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

問題1答案如下:

javaScript函數中執行C#代碼中的函數:

方法一:頁面和頁面類相結合

1、函數聲明為public           

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

            

1 public string ss()
2 {
3         return("a");
4 }

 

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

             前台腳本

1 <script language=javascript>
2 
3              var a = "<%=ss()%>";//JavaScript中調用C#后台的函數
4          alert(a);
5  </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     <script type="text/javascript">
 5      function JsCallCSharp(param1)
 6      {
 7                   PageMethods.sayhell(param1,onSayHelloSucceeded);//sayhell是后台標注了【webMethod】屬性的方法 param1是傳入該方法的參數,onSayHelloSucceeded是回調函數主要是對后台返回的結果進一步處理
 8      }
 9             function onSayHelloSucceeded(result)//綁定的回調函數
10      {
11      alert(result);
12      }
13 
14     </script>
15 
16 </head>
17  <body>
18      <form id="form1" runat="server">
19      <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">//ScriptManager控件管理腳本的,
20 
21 注意設置EnablePageMethods="true"此屬性
22      </asp:ScriptManager>
23      <div>
24          <input type="button" onclick="JsCallCSharp('hello')" />     </div>
25      </form>
26  </body>
27  </html>
28 

 后台代碼(.cs文件)

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Web.Services;//添加web服務引用
 
 public partial class _Default : System.Web.UI.Page {
 protected void Page_Load(object sender, EventArgs e)
 { 
 
 }
 [WebMethod]//標示為web服務方法屬性
 public static string sayhell(string say)//注意函數的修飾符,只能是靜態的
 {
     return say;
 }
 }

 

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

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

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

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

3.在頁面中ScriptManager控件並添加web服務引用 <Services><asp:ServiceReference Path="~/WebService.asmx" /></Services>

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

WebService.HelloWorld("helloWord",function(res)//Webservice是web服務頁面名稱 HelloWord為web服務頁面類中的方法,
function為回調JavaScript函數主要是處理返回的結果
      {
      alert(res);
      }
); 

 

示例:

頁面代碼

<html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
     <title>無標題頁</title>

    <script type="text/javascript">
     function JsCallCSharp(param1)
     {
                  PageMethods.sayhell(param1,onSayHelloSucceeded);
     }
            function onSayHelloSucceeded(result)
     {
     alert(result);
     }

//該方法為調用的函數
     function JsCallWebService()
     {
      WebService.HelloWorld("helloWord",function(res)//調用web服務      {
      alert(res); 
     });
     } 
    </script>

</head>
 <body>
     <form id="form1" runat="server">
     <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" >
    <Services><asp:ServiceReference Path="~/WebService.asmx" />
</Services>//注意要引用web服務
     </asp:ScriptManager>
     <div> 
       <input type="button" onclick="JsCallCSharp('hello')" value="測試C#后台頁" />
         <input type="button" onclick="JsCallWebService()" value="測試web后台類" />
     </div>
     </form>
 </body>
 </html>

 

web服務后台代碼

using System;
using System.Collections;
using System.Linq;
 using System.Web;
 using System.Web.Services;
 using System.Web.Services.Protocols;
 using System.Xml.Linq;

/// <summary> ///WebService 的摘要說明 /// </summary>
 [WebService(Namespace = "http://tempuri.org/")]
 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] //若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的注釋。 [System.Web.Script.Services.ScriptService]//注意要添加該標示 public class WebService : System.Web.Services.WebService {

    public WebService () {

        //如果使用設計的組件,請取消注釋以下行
         //InitializeComponent();
     }

    [WebMethod]//方法要標示的屬性
     public string HelloWorld(string result) {
         return result;
     }
     }

 

問題2答案如下: 如何在JavaScript訪問C#變量

方法一:1、通過頁面上隱藏域訪問<input id="xx" type="hidden" runat="server">

方法二:1、如后台定義了PUBLIC STRING N;前台js中引用該變量的格式為'<%=n%>'或"+<%=n%>+"

方法三:1、或者你可以在服務器端變量賦值后在頁面注冊一段腳本

             "<script language='javascript'>var temp=" + tmp + "</script>"

             tmp是后台變量,然后js中可以直接訪問temp獲得值。

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

方法一:1、前台使用服務器文本控件隱藏域,將js變量值寫入其中;后台直接通過控件id訪問和調用

方法二:可以用cookie或session存儲變量值,后台直接使用

問題4 C#代碼執行JavaScript函數和調用JavaScript函數

方法一: .盡量少用Response.Write(< script>< /script>);這種方法,它會影響CSS導致頁面效果偏差

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

示例:

腳本函數

function CSharpCallJs(param1,param2)
           {
               alert(param1 + param2);
           }

 

頁面后台代碼

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

 

方法三:C#中使用 Page.RegisterStartupScript("ggg","<script>CSharpCallJs“”+param1+“,"+param2+“);"</script>");

方法四:C#中使用Literal類(類似label類)

示例代碼

private void Button2_Click(object sender, System.EventArgs e)

{

string str;

str="<script language='javascript'>";

str+="selectRange()";

str+="</script>";

//Literal1.Visible=true;

Literal1.Text=str;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM