簡體   English   中英

調用C#方法並從JavaScript傳遞變量

[英]Call C# method and pass variable from JavaScript

我在用戶控件中有此ASP.NET C#方法:

protected void SaveChanges(object clientArr)
{
    System.Diagnostics.Debug.WriteLine("SaveChanges");
    //clientArr will be a string[]
}

我希望能夠調用此方法並從JavaScript端傳遞變量。 我知道這樣做'<%=divMainContent.ClientID%>'可以獲取客戶端ID。 我嘗試做'<%=SaveChanges(clientArr)%>' ,但是它不起作用。 有沒有可行且簡單的解決方案? 最好使用'<%=%>' (不確定它的名稱)嗎?

JavaScript方法:

function clickSaveChanges(element) {
    var mainContentChildren = document.getElementById('<%=divMainContent.ClientID%>').childNodes;
    var clientArr = new Array(mainContentChildren.length * 2);
    //add stuff to  clientArr
   '<%=SaveChanges(clientArr)%>'  //this line causes page to crash
}

SaveChanges應該為<%= %>表示法返回內容。 但是,不能通過名稱調用它來從客戶端JavaScript調用服務器端方法。 您必須通過Web服務頁面回調與服務器進行通信。 頁面回調啟動頁面生命周期的正常流程,即使它是帶外請求。

您可以通過非常簡單的ajax調用來實現相同的目的。 您只需要在腳本中添加JQuery即可使用ajax。

C#代碼

[WebMethod]
public static void SaveChanges(object clientArr)
{ 
 System.Diagnostics.Debug.WriteLine("SaveChanges");
 //clientArr will be a string[]
}

的JavaScript

 function clickSaveChanges(element) {
var mainContentChildren = document.getElementById('<%=divMainContent.ClientID%>').childNodes;  

  var clientArr = new Array(mainContentChildren.length * 2);
   //add stuff to  clientArr

   String sParam = clientArr.toString(); 
   $.ajax({ 
   type: "POST", 
   url: "PageName.aspx/SaveChanges", 
   data: "{s:sParam}", // passing the parameter 
   contentType: "application/json; charset=utf-8", 
   dataType: "json", 
   success: function(retValue) {
    // Do something with the return value from.Net method
    } 
}); 

}

您不能混合使用客戶端JavaScript代碼和服務器端C#代碼。 您需要一些AJAX魔術來使其正常工作。 您需要完成以下兩項工作:

  1. 您可以將請求發送到的端點。 您可以使用ASP.NET WebAPI或其他一些.NET樣式終結點獲取此信息。 那將取決於您當前的體系結構。 您正在使用MVC還是WebForms? 該端點從您的UI接收數據后,將負責調用SaveChanges()方法。

  2. 您將需要客戶端進行AJAX調用,以將數據發送到端點。 最簡單的方法是使用jQuery。 查看有關AJAX方法的文檔:

http://api.jquery.com/jquery.ajax/

一個超級簡單的示例如下所示:

$.ajax({
type: "POST",
url: "yourEndpointAddress",
data: {
    name: "John",
    location: "Boston"
    }
})
.success(function (msg) {
        alert("Data Saved: " + msg);
    });

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM