繁体   English   中英

如何从Javascript调用C#函数

[英]How to call C# function from Javascript

我看到了这个问题的几种解决方案。 但是,当我尝试自己时,效果并不理想。

我试图将我的C#代码修改为此

[WebMethod]
protected void Show(object sender, EventArgs e)
{
    //C# function
}

但是我的asp.net没有WebMethod东西。 我需要包括一些库吗?

我在JS中做的对吗? 为什么发件人和e错误?

 <script> $(document).ready(function () { var image = $("#VImage").html() $("#myModal").on("shown.bs.modal", function () { PageMethods.Show(object sender, EventArgs e); }); }); </script> 

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

PageMethods.Show(object sender, EventArgs e);

应该:

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

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

  • [WebMethod]注释
  • 还认为在这种情况下,它必须是publicstatic

在客户端,由于您使用的是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(object sender, EventArgs e) ,这意味着服务器正在等待客户端发出请求,这两个对象中的一个它知道足够反序列化为EventArgs对象,因此可以调用Show方法。

我建议尽可能将参数更改为原始类型(“字符串”,“ int”等),或创建自己的已验证的参数对象,该对象可以由.NET进行序列化/反序列化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM