调用C#方法并从JavaScript传递变量

时间:2014-07-29 16:25:06

标签: c# javascript asp.net

我在用户控件中使用了这个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
}

3 个答案:

答案 0 :(得分:0)

SaveChanges应返回<%= %>符号的内容。但是,您无法通过名称调用客户端JavaScript来调用服务器端方法;您必须通过a web servicepage callback与服务器进行通信。页面回调启动页面生命周期的正常流程,即使它是带外请求。

答案 1 :(得分:0)

您可以通过非常简单的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
    } 
}); 

}

答案 2 :(得分:0)

您无法将客户端JavaScript代码与服务器端C#代码混合在一起。你需要的是一些AJAX魔术来使这项工作。你需要做两件事才能完成这项工作:

  1. 您可以将请求发送到的端点。您可以使用ASP.NET WebAPI或其他一些.NET样式端点来实现此目的。这取决于您当前的架构。您使用的是MVC还是WebForms?一旦从您的UI接收数据,此端点将负责调用您的SaveChanges()方法。

  2. 您需要从客户端调用AJAX才能将数据发送到您的终端。最简单的方法是使用jQuery。看一下AJAX方法的文档:

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

    一个非常简单的例子是这样的:

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

    希望它有所帮助。