如何从Javascript调用C#函数

如何从Javascript调用C#函数,javascript,c#,asp.net,Javascript,C#,Asp.net,我看到了这个问题的几种解决方案。然而,当我尝试自己,它不工作的很好 我试图将我的C#代码修改成这样 [WebMethod] protected void Show(object sender, EventArgs e) { //C# function } 但是我的asp.net没有WebMethod。我需要包括一些图书馆吗 在JS中,我做得对吗?为什么发送方和e是错误的 $(文档).ready(函数(){ var image=$(“#VImage”).html() $(“#myMo

我看到了这个问题的几种解决方案。然而,当我尝试自己,它不工作的很好

我试图将我的C#代码修改成这样

[WebMethod]
protected void Show(object sender, EventArgs e)
{
    //C# function
}
但是我的asp.net没有WebMethod。我需要包括一些图书馆吗

在JS中,我做得对吗?为什么发送方和e是错误的


$(文档).ready(函数(){
var image=$(“#VImage”).html()
$(“#myModal”).on(“show.bs.modal”,函数(){
显示(对象发送者,事件参数e);
});
});

您不应该从这样的任何地方调用函数,您调用函数的方式与声明函数的方式相同

PageMethods.Show(object sender, EventArgs e);
应该是:

var sender, e;
PageMethods.Show(sender, e);

您不应该从这样的任何地方调用函数,您调用函数的方式与声明函数的方式相同

PageMethods.Show(object sender, EventArgs e);
应该是:

var sender, e;
PageMethods.Show(sender, e);

调用C#方法的方式与尝试进行任何其他AJAX调用没有什么不同。您只需要确保C#方法正确公开。要做到这一点,你需要

  • [WebMethod]
  • 还认为在这种情况下,它需要是
    public
    static
在客户端,由于使用JQuery,因此可以用与任何AJAX调用相同的方式调用它

    $.ajax({
      type: "POST",
      url: "Default.aspx/Show",
      data: "{ sender: {}, e: {} }",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(msg) {
          console.log(msg);
      },
      error: function (msg) {
          console.log(msg);
      }
    });
这样想,您需要发出一个HTTP请求,其中包含web服务器调用C#方法所需的所有信息。这意味着它需要知道方法名称和方法所需的参数

在幕后,当您发出HTTP请求时,框架从HTTP POST获取主体,并尝试反序列化JSON对象,以获取调用C#方法所需的方法和参数的名称

在您的示例中,C#方法具有签名
Show(objectsender,EventArgs e)
,这意味着服务器希望从客户端获得两个对象,其中一个对象它知道足够多,可以反序列化为
EventArgs
对象,以便调用
Show
方法


如果可能的话,我建议将参数更改为基本类型(“string”、“int”等),或者创建您自己的parameters对象,您已经验证了它可以被.NET序列化/反序列化。

调用C#方法的方式与尝试进行任何其他AJAX调用没有什么不同。您只需要确保C#方法正确公开。要做到这一点,你需要

  • [WebMethod]
  • 还认为在这种情况下,它需要是
    public
    static
在客户端,由于使用JQuery,因此可以用与任何AJAX调用相同的方式调用它

    $.ajax({
      type: "POST",
      url: "Default.aspx/Show",
      data: "{ sender: {}, e: {} }",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(msg) {
          console.log(msg);
      },
      error: function (msg) {
          console.log(msg);
      }
    });
这样想,您需要发出一个HTTP请求,其中包含web服务器调用C#方法所需的所有信息。这意味着它需要知道方法名称和方法所需的参数

在幕后,当您发出HTTP请求时,框架从HTTP POST获取主体,并尝试反序列化JSON对象,以获取调用C#方法所需的方法和参数的名称

在您的示例中,C#方法具有签名
Show(objectsender,EventArgs e)
,这意味着服务器希望从客户端获得两个对象,其中一个对象它知道足够多,可以反序列化为
EventArgs
对象,以便调用
Show
方法


如果可能的话,我建议将参数更改为基本类型('string','int',等等),或者创建您自己的parameters对象,您已经验证该对象可以通过.NET进行序列化/反序列化。

您是否检查了它是否有一个
,使用您可以添加的
?使用System.Web.Services如何
酷!我得到了它!感谢您的示例代码在语法上(缺少
)和语义上(从
void
函数返回值)都是错误的。对此表示抱歉。我会编辑它。你是否检查过它是否有一个
使用你可以添加的
?使用System.Web.Services
如何酷!我得到了它!感谢您的示例代码在语法上(缺少
)和语义上(从
void
函数返回值)都是错误的。对此表示抱歉。我会编辑它