【问题标题】:How to call C# function from Javascript如何从 Javascript 调用 C# 函数
【发布时间】:2015-10-08 19:38:38
【问题描述】:

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

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

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

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

在 JS 中我做得对吗?为什么 sender 和 e 是错误的?

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

【问题讨论】:

  • 您是否检查过它是否有可以添加的using
  • using System.Web.Services;怎么样
  • 酷!我得到了它!谢谢
  • 您的示例代码在语法上(缺少;)和语义上(从void 函数返回值)错误。
  • 对不起。我会编辑它

标签: javascript c# asp.net


【解决方案1】:

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

PageMethods.Show(object sender, EventArgs e);

应该是:

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

【讨论】:

    【解决方案2】:

    调用 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 方法.

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

    【讨论】:

      猜你喜欢
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      • 2023-03-28
      • 2012-12-07
      • 1970-01-01
      相关资源
      最近更新 更多