WebMethod不会在调试时被调用

时间:2018-10-31 18:16:36

标签: c# jquery asp.net webforms

我正在尝试使用jQuery插入数据,并且之前已经做过。但是暂时,我已经很长时间了。现在的问题是我正在尝试使用浏览器进行调试,并且可以看到实际上没有调用Ajax调用。所以这是我的场景:我有一个表数据,每一行都与一个按钮相关联。如果单击该按钮,则关联的行数据将被插入数据库表中(但是这里我在调试器中放置了断点,以检查是否调用了Web方法)。所以这就是我尝试过的:

<title>Tutorial - Sample App</title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<form id="form1" runat="server">
<div>
  <asp:Label ID="lblPersons" runat="server"></asp:Label>
</div>
</form>

 <script>
    $(".use-address").click(function () {
        var $row = $(this).closest("tr");    //Get the row
        var $text = $row.find(".val").text(); //Get the text or value

        alert($text);

        debugger;
        var persons = new Array();
        var person = {};

        person.name = $row.find(".val").text();
        persons.push(person);

        //The Ajax call here
        $.ajax({
            type: "POST",
            url: "/SampleWebForm.aspx/InsertPersons", //This isn't called actually and keeping the code in the same page - SampleWebForm.aspx
            data: JSON.stringify(persons),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                alert(data + " record(s) inserted.");
            }
        });
    });
</script>

然后在此处的C#部分:

protected void Page_Load(object sender, EventArgs e)
{
   lblPersons.Text = Concatenate();
}

public class Person
{
   public string name { get; set; }
   public string age { get; set; }
}

public List<Person> GetPersons()
{
   List<Person> lst = new List<Person>
   {
      new Person { name = "John", age = "20" },
      new Person { name = "Jack", age = "30" }
   };

   return lst;
}

public string Concatenate()
{
   string data = "";
          data += "<table id = 'tblPersons'" +
                  "<thead>" +
                  "<tr class='ui-widget-header'>" +
                  "<th>Name</th>" +
                  "<th>Age</th>" +
                  "</tr>" +
                  "</thead>" +
                  "<tbody>" +
                  "";
                  foreach (var item in GetPersons())
                  {
          data +=   "<tr><td class='val'><span>" + item.name + "</span></td>" +
                    "<td>" + item.age + "</td><br/>" +
                    "<td><button type = 'button' id = 'btnSave'>Click Here</button><td><tr>" +
                    "</td>";
                  }
          data += "" +
                  "</tbody>" +
                  "</table>";

    return data;
}

[WebMethod]
public string InsertPersons(Person persons) //This is the method that's supposed to be hit while debugging but doesn't
{
   string name = "";
   name = persons.name;

   return name;
}

4 个答案:

答案 0 :(得分:1)

您需要声明函数“静态”,否则它将无法正常工作

public static string InsertPersons(Person persons)

答案 1 :(得分:1)

确保您的代码达到可以发出Ajax请求的地步。

启用了Page方法的脚本管理器可能会提供帮助。check here on previous SO article

<asp:ScriptManager ID="scriptManager"
        runat="server"
        EnablePageMethods="true" >
</asp:ScriptManager>

此外,请使用静态方法。验证要作为data参数值发送的JSON字符串。 This article可能会有帮助。

答案 2 :(得分:1)

那不是webservice(.asmx),而是.aspx中公开的Page方法

使用注释[PageMethod]代替webmethod注释

答案 3 :(得分:0)

我能够使其工作,但我的错是,尽管C#方法有一个要传递的对象,但我试图传递一个List。不是对象列表。所以我更改了以下内容:

debugger;
var persons = new Array();
var person = {};

person.name = $row.find(".val").text();
persons.push(person);

收件人:

debugger;
var person = {};

person.name = $row.find(".val").text();

只需删除push()方法和 person 数组。谢谢大家的宝贵建议。