如何从Javascript调用c#函数

本文关键字:函数 调用 Javascript | 更新日期: 2023-09-27 18:16:53

对于这个问题,我看到了几个解决方案。然而,当我自己尝试时,效果并不好。

我试图修改我的c#代码到这个

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

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

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

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

如何从Javascript调用c#函数

你不应该像这样从任何地方调用函数,你调用函数的方式和声明函数的方式是一样的。

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方法。

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