【问题标题】:Sending object on AJAX call to WebMethod将 AJAX 调用上的对象发送到 WebMethod
【发布时间】:2016-11-11 10:28:40
【问题描述】:

我正在尝试将 JSON 对象发送到 C# 方法,并返回一个不同的(也是 JSON)对象。

对象是在 JavaScript 中创建的:

    lottery = {
        TotalValue: totalValue,
        Players: txtPlayers.value,
        TicketPrice: txtAmount.value,
        FirstPrize: prize,
        MyComission: myComission,
        MyRate: myRate,
        SellerComission: sellerComission,
        SellerRate: sellerRate
    }

然后通过 AJAX 发送:

function CreateLottery(lottery) {
$.ajax({
    type: 'POST',
    url: 'default.aspx/Create',
    data: lottery,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (data, status) {
        alert(status)
    },
    error: alert("error!")
 });
}

C# 代码隐藏(我有断点,它永远不会到达这里):

    [WebMethod]
    public static object Create(Lottery lottery)
    {
        return new
        {
            foo = "bar",
        };
    }
    public class Lottery
    {
        public decimal TotalValue { get; set; }
        public decimal Players { get; set; }
        public decimal TicketPrice { get; set; }
        public decimal FirstPrize { get; set; }
        public decimal MyComission { get; set; }
        public decimal MyRate { get; set; }
        public decimal SellerComission { get; set; }
        public decimal SellerRate { get; set; }
    }

为什么我总是得到“错误!”警报?

【问题讨论】:

  • "为什么总是出错?" - 那会是什么错误呢?
  • 检查答案并告诉我它是否有效。
  • 我已经编辑了问题,无需反对。这是一个合理的问题,正在发生一些特殊的事情,我正在寻求帮助,而不是让任何人为我做这项工作。

标签: c# jquery json ajax webmethod


【解决方案1】:

您可以将数据发送到网络方法,有两种类型的方法如下。

方法一

您可以在 web 方法中传递每个属性值,例如 as

function CreateLottery(lottery) {
$.ajax({
    type: 'POST',
    url: 'default.aspx/Create',
    data: {'TotalValue': totalValue, 'Players': txtPlayers.value,'TicketPrice': txtAmount.value, 'FirstPrize': prize,     'MyComission': myComission, 'MyRate': myRate, 'SellerComission': sellerComission, 'SellerRate': sellerRate},
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (data, status) {
        alert(status)
    },
    error: alert("error!")
 });
}

方法二

使用 JSON.stringify(lottery) 将数组对象更改为字符串。

var lottery = {
    TotalValue: totalValue,
    Players: txtPlayers.value,
    TicketPrice: txtAmount.value,
    FirstPrize: prize,
    MyComission: myComission,
    MyRate: myRate,
    SellerComission: sellerComission,
    SellerRate: sellerRate
}


function CreateLottery(lottery) {
$.ajax({
    type: 'POST',
    url: 'default.aspx/Create',
    data: JSON.stringify(lottery),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (data, status) {
        alert(status)
    },
    error: alert("error!")
 });
}

【讨论】:

  • 我这样做了,还修复了错误回调,如另一个答案所示,但仍然得到“错误!”。我尝试了你的两种方法。问题是否可能是数据没有像 Lottery 类所期望的那样以十进制(数字)形式发送?
【解决方案2】:

首先对数据进行字符串化:

var lottery = {
    TotalValue: totalValue,
    Players: txtPlayers.value,
    TicketPrice: txtAmount.value,
    FirstPrize: prize,
    MyComission: myComission,
    MyRate: myRate,
    SellerComission: sellerComission,
    SellerRate: sellerRate
}

function CreateLottery(lottery) {
$.ajax({
    type: 'POST',
    url: 'default.aspx/Create',
    data: JSON.stringify(lottery),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (data, status) {
        alert(status);
    },
    error: function () {
        alert("error!");
    }
 });
}

编辑:您的错误回调定义不正确,每次调用 ajax 时都会触发。修改如上图。

【讨论】:

  • 谢谢。我已经修复了你所说的,但我仍然得到“错误!”。问题是否可能是某些值没有像 Lottery 类值所期望的那样以十进制(数字)形式发送?
猜你喜欢
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多