2013-03-11 77 views
0

我試圖通過使用Javascript orderlines到異步控制器操作的列表:MVC 4:複雜的對象傳遞給異步控制器動作

var model = "<some JSON string>"; 
$.ajax({ type: "POST", 
    url: "/MyController/MyAction", 
    datatype: "json", 
    data: { 'orderLines': model}, 
    success: function(msg) { 
    ... 
    } 
}); 

當我檢查在運行時的模型變量的值訂單行屬性設置好。但是,當我在我的控制器操作中放置斷點時,orderline傳入參數的屬性爲0.它看起來像JSON字符串未正確反序列化。

控制器的動作看起來是這樣的:

public ActionResult AsyncUpdateOrderline(List<OrderLine> orderLines) 
{ 
    ... 
} 

我怎樣才能正確地傳遞複雜對象的異步控制器操作?

感謝, 尼爾斯

回答

6

您需要設置請求Content-Type頭,並使用JSON.stringify方法將數據發送到控制器:

var model = [ 
    { quantity: 1, name: 'some name 1' }, 
    { quantity: 2, name: 'some name 2' } 
]; 

$.ajax({ 
    url: '/MyController/MyAction', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({ orderLines: model }), 
    success: function(msg) { 
     ... 
    } 
}); 

注意如何模型不應該是一個JSON字符串,但是一個javascript數組對象,其中每個元素都反映了您的OrderLine模型的結構。

+0

謝謝,它現在幾乎工作。唯一不起作用的是:我在訂單行中有一個UnitPrice對象。此對象的所有字段都是反序列化的,除了金額字段。它在控制器操作中爲0,而在JSON字符串中設置爲十進制值。有任何想法嗎? – ngruson 2013-03-11 11:13:52

+0

嘗試在JavaScript對象中將其設置爲字符串。例如:'{unitPrice:'12 .34'}''而不是'{unitPrice:12.34}'。如果您有興趣瞭解爲什麼這是必要的細節,您可以查看下面的答案,我解釋了這一點:http://stackoverflow.com/a/8968207/29407 – 2013-03-11 11:19:22

+0

JSON字符串由JavaScriptSerializer()生成。序列化(OBJ)。有什麼聰明的方式來影響JavaScriptSerializer如何處理小數值?如果沒有,我必須做一個更骯髒的修復。 – ngruson 2013-03-11 11:35:06

相關問題