2015-05-11 109 views
0

我無法發送值使用JSON我的webmethod。將值傳遞給WEBMETHOD使用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); 
     } 
    }); 
}); 

以下是我與小提琴手:

{ 
    '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表的名單,我呼籲表中的字符串化,所以我認爲這是一個壞的結果回來。

我怎樣才能改變我的Ajax調用正確的價值觀傳遞給正確的參數?

回答

1

更改Web方法接受對象

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

您可以在Order類失去了JSON財產了。

另外彈出一個dataType: "json"到您的jQuery AJAX調用。

如果您需要保留您的參數,然後創建另一個的這些和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); 
    } 
}); 
+0

與問題是,有實際上2個數量級,所以我需要列表() – user3788671

+0

我需要其他paramters以及。我能保留這些嗎? – user3788671

+0

看看我的更新。 – garryp