C#和JavaScript交互(前后台交互)


C#代碼與javaScript函數的相互調用:
 
1.如何在JavaScript訪問C#函數?
 
2.如何在JavaScript訪問C#變量?
 
3.如何在C#中訪問JavaScript的已有變量?
 
4.如何在C#中訪問JavaScript函數?
 

1、javaScript函數中執行C#代碼中的函數:
 
方法一:頁面和頁面類相結合
 
1、函數聲明為public             
 
             后台代碼(把public改成protected也可以)
 

 public string ss() 
{ 
    return("a"); 
}


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

<script language=javascript>
 
var a = "<%=ss()%>";//JavaScript中調用C#后台的函數
 
alert(a);
 
</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代碼
 
 

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>無標題頁</title>
 
    <script type="text/javascript">
    function JsCallCSharp(param1)
    {            
      PageMethods.sayhell(param1,onSayHelloSucceeded);//sayhell是后台標注了【webMethod】屬性的方法 param1是傳入該方法的參數,onSayHelloSucceeded是回調函數主要是對后台返回的結果進一步處理
    }        
    function onSayHelloSucceeded(result)//綁定的回調函數 
    { 
    alert(result);
    } 
 
    </script>
 
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">//ScriptManager控件管理腳本的,
 
注意設置EnablePageMethods="true"此屬性
    </asp:ScriptManager>
    <div>
        <input type="button" onclick="JsCallCSharp('hello')" />
    </div>
    </form>
</body>
</html>

 后台代碼(.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