2012-11-14 34 views
1

我正在使用asp.net mvc。我有這樣的動作:ajax中的空數據調用mvc動作

[HttpPost] 
public ActionResult Create(MyData myData) 
{ 
    .... // For some reason data is always empty. The attributes are all null 
} 

MyData的是:

public class MyData { 
    public string prop1 {get;set;} 
    public IEnumerable<int> prop2 {get;set;} 
} 

我打電話這樣說:

var specificData = { prop1: 'abc', prop2: [1,2,3] } 

    $.ajax({ 
     type: 'POST', 
     dataType: 'json', 
     url: '/MyController/Create', 
     data: { myData: specificData }, //data contains the same attributes as MyData class 
     success: function (data, b,c,d) { 
      alert("success!"); 
     }, 
     error: function (data, b, c, d) { 
      alert('fail'); 
     } 
    }); 

的問題是創建行動中的 「數據」 變量實例化,但它的屬性都是空的。難道我做錯了什麼?

UPDATE
根據@Rory McCrossan我用data: specificData代替data: { myData: specificData }解決它。但現在我在不同的地方有這個問題。因爲我現在用更復雜的類相關MyData的類的序列化問題: 公共類Person { 公共字符串名稱{;設置;} }

public class MyData { 
    public string prop1 {get;set;} 
    public IEnumerable<Person> prop2 {get;set;} 
} 

和specificData是:

var specificData = { prop1: 'abc', 
        prop2: [ 
         {name:'a'}, 
         {name:'b'}, 
         {name:'c'}] 
        }; 

在該操作中,myData.prop2.ElementAt(0).name爲null。 現在有什麼錯?

+1

你可以發佈你的'data'變量的內容。此外,你的'MyData'類的屬性列表將有所幫助。 –

+0

我覺得問題是使用可變數據,你可以請更改它 – Elby

+0

@Rory McCrossan:我更新了我的代碼。 – Naor

回答

0

創建要發送的JS對象時,您正在將屬性包裝在myData屬性中,該屬性不是必需的。試試這個:

$.ajax({ 
    data: specificData 
    // other settins... 
}); 
+0

你確定嗎?據我所知,如果Web服務需要myData參數,那麼數據應該是{myData:{/ * data here * /}}。這與mvc不同嗎? – Naor

+0

@Naor我最初的想法是不正確的 - 我更新了我的答案。這現在應該適合你。 –

+0

你說得對,這是爲我工作的,但不適用於包含複雜數組的類。數組返回元素,但元素未被填充。我更新了我的問題。哪裏不對? – Naor