如何从Javascript

时间:2015-10-08 19:38:38

标签: javascript c# asp.net

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

我尝试将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>

1 个答案:

答案 0 :(得分:0)

您调用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序列化/反序列化的参数对象。