使用Json将值传递给webmethod

时间:2015-05-11 21:31:10

标签: c# jquery ajax json

我无法使用JSON向我的网络方法发送值。

public class Order
{
    public string Item { get; set; }
    public string Color { get; set; }
    public string Qty { get; set; }
    public string Size { get; set; }
}

[WebMethod]
public static string SendOrder(string name, string branch, string jobFunction, string requestReason, string logo, string json)
{
    var orders = JsonConvert.DeserializeObject<List<Order>>(json);
}

这是我的ajax电话:

$('#SubmitOrder').on('click', function (e) {

    var table = $('#orders-table').tableToJSON({
        ignoreColumns: [4]
    });

    var obj = {
        Name: $('#FullNametbx').val(),
        Branch: $('#Address').val(),
        JobFunction: $('#JobFunction').val(),
        RequestReason: $('#RequestReason').val(),
        Logo: $('#LogoOnShirt').val(),
        Orders: table
    };
    alert(JSON.stringify(obj));
    $.ajax({
        type: "POST",
        url: "Apparel.aspx/SendOrder",
        data: { data: JSON.stringify(obj) },
        contentType: "application/json",
        dataType: "json",
        success: function (msg) {
            alert(msg);
        }
    });
});

以下是我与Fiddler的关系:

{ 
  'name': 'Roger Rabbit', 
  'branch': 'PHX', 
  'jobfunction': 'Service Tech',
  'requestReason': 'New Hire',
  'logo': 'Nike',
  'json': '[
    {
      "Item":"Port Authority Women's Jacket #L790 - Black",
      "Size":"X-Small",
      "Color":"Black",
      "Quantity":"3"
    },
    {
      "Item":"Port Authority® Long Sleeve Easy Care Shirt",
      "Size":"3XL-Tall",
      "Color":"Black",
      "Quantity":"4"
    }]'
}

问题是我将所有基本参数都作为字符串,但最后一个参数称为“json”,这是一个html表中的订单列表,我在表上调用stringify,所以我认为回来的结果不好。

如何更改我的ajax调用以将正确的值传递给正确的参数?

1 个答案:

答案 0 :(得分:1)

更改Web方法以接受对象

[WebMethod]
public static string SendOrder(IEnumerable<Order> order)
{
    //No need to deserialize the JSON
}

您也可能会丢失Order类上的json属性。

同时在您的jQuery AJAX调用中弹出dataType: "json"

如果你需要保留你的参数,那么创建另一个由这些和Order类组成的类,然后将它们拉出你的WebMethod。

public class OrderViewModel
{
    public IEnumerable<Order> Orders { get; set; }

    public string Name { get; set; }

    // ... etc ... //
}

将您的AJAX更改为此而不是自己连接字符串:

var obj = {
    "name" : $('#FullNametbx').val(),
    "branch" : $('#Address').val(),
    "jobfunction" : $('#JobFunction').val()
    // ... etc ... //
};

$.ajax({
    type: "POST",
    url: "Apparel.aspx/SendOrder",
    data: JSON.stringify(obj),
    dataType: 'json',
    contentType: "application/json",
    success: function (msg) {
        alert(msg);
    }
});