2012-10-26 49 views
1

我創建一個JavaScript的LocationId和id對象。從ajax發送數據到控制器在C#

我有一個類MyClass在C#與這兩個變量。

我有一個Ajax調用它在我的控制器調用一個方法:

MyMethod(List<MyClass> myObject, int user_id) 

我用:

traditional: true 

在Ajax調用。

該方法被調用,myObject具有正確的長度,但LocationId和id都是0.爲什麼會發生這種情況以及如何解決它?

public class MyClass { 
    public int LocationId {get; set;} 
    public int id {get; set;} 
} 

的Javascript:

var myArray = new Array(); 
var object = new { 
    LocationId: 1; 
    id: 2; 
} 
myArray.push(object); 

阿賈克斯:

$.ajax({ 
    type: "GET", 
    url: "correctUrl", 
    traditional: true, 
    data: { user_id: 1, myObject: myArray} 
}); 
+2

向你展示ajax調用。 –

+0

並顯示您的MyClass – Fisch

+0

顯示更多代碼請輸入 – Yasser

回答

2

你的JavaScript代碼來創建對象是無效的。試試這個:

var myArray = new Array(); 
var object = {  // No new 
    LocationId: 1, // , instead of ; 
    id: 2 
} 
myArray.push(object); 

順便說一句,你可以縮短這:

var myArray = [ { LocationId: 1, id: 2 } ]; 
0

我與亞歷克斯同意。 我會改變你的Ajax調用是這樣的:

$.ajax({ 
    type: 'POST', 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8;', 
    url: "correctUrl", 
    data: JSON.stringify({user_id: 1, myObject: myArray}), 
    // traditional: true, 
    error: function (req, status, error) { 
     alert(error); 
    } 
}); 

我已經刪除traditional: true你不要在這裏需要它。
將提交類型更改爲POST。它對序列化對象更好。
我改變了提交的數據與JSON.stringify

您可以下載json2.jshere和獲取更多here

我已經改變了你的C#類是這樣的:

public class MyClass 
{ 
    public int LocationId { get; set; } 
    public int id { get; set; } 
} 

[Serializable] 
public class jSonObject 
{ 
    public int user_id { get; set; } 
    public List<MyClass> myObject { get; set; } 
} 

和你的MVC的行動應該是這樣的:

[HttpPost] 
    public ActionResult MyMethod(jSonObject myData) 
    { 
     ... 
    } 

另一件事,我建議是實現JsonValueProviderFactory
你可以找到很多有用的信息herehere