Ajax 无法在 asp.net 和 C# 中调用 webform 的 webmethod

Ajax cannot call webform's webmethod in asp.net and C#

这是我的 Ajax 函数:

function createSalesInvoice() {
  var SalesInvoice = {};
    SalesInvoice.PaidAmount = $("#textbox1").val();
    SalesInvoice.RemainingAmount = $("#textbox2").val();       
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/AjaxRequestToServer.aspx/createSalesInvoice", //URI   
        data: '{SalesInvoice: ' + JSON.stringify(SalesInvoice) + '}',
        dataType: "json",
        success: function (data) {

            bootbox.alert("Item Added Successfully", function (e) { });

            GetSalesInvoiceItemsList();
            $("#hdfFlag").val("false");
        },
        error: function (xhr) {
        }
    });
}

我无法打电话给 [webmethod]。文本框 returns 中的所有值均正确。我想在 table.

中插入这些值
[WebMethod]
        public static int createSalesInvoice(SalesInvoiceEntity SalesInvoice)
        {
            int i = SalesInvoiceManager1.createSalesInvoice(SalesInvoice);
            return i;
        }
 data: '{SalesInvoice: ' + JSON.stringify(SalesInvoice) + '}',

这应该是

data: JSON.stringify({'SalesInvoice':SalesInvoice }),

您的 Javascript 函数应该如下所示,只更改了一行。 并且将 javscript 对象名称更改为 "SalesInvoiceJS" 以便于区分。

   function createSalesInvoice() {
  var SalesInvoiceJS = {};

    SalesInvoiceJS.FinalAmount = $("#txtGrandTotal").val();
    SalesInvoiceJS.PaidAmount = $("#txtTotalPaid").val();
    SalesInvoiceJS.RemainingAmount = $("#txtTotalRemAmt").val();
   // alert(SalesInvoiceJS.TotalInvoiceValue); ----------------This alert is working fine and return all above values correct.
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/AjaxRequestToServer.aspx/createSalesInvoice", //URI   
        data: JSON.stringify({'SalesInvoice':SalesInvoiceJS }),
        dataType: "json",
        success: function (data) {

            bootbox.alert("Item Added Successfully", function (e) { });

            GetSalesInvoiceItemsList();
            $("#hdfFlag").val("false");
        },
        error: function (xhr) {
        }
    });
}

参考:From this place

需要检查传入的参数data

 SalesInvoice.FinalAmount = $("#txtGrandTotal").val();
 SalesInvoice.PaidAmount = $("#txtTotalPaid").val();
 SalesInvoice.RemainingAmount = $("#txtTotalRemAmt").val();

如果以上参数是整数,如在 webmethod 参数中 - (SalesInvoiceEntity SalesInvoice),则应通过

转换为 int
SalesInvoice.FinalAmount = parseInt($("#txtGrandTotal").val());

并且值不能为空,而是 0。

希望有用。