1

我正在使用 asp.net mvc。我有这个动作:

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

我的数据是:

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');
        }
    });

问题是在 Create 操作中,“数据”变量被实例化,但它的属性都是空的。难道我做错了什么?

更新
根据@Rory McCrossan,我通过使用data: specificData而不是data: { myData: specificData }. 但现在我在不同的地方遇到了这个问题。与 MyData 类相关的序列化问题,因为现在我使用的是更复杂的类: public class Person { public string name{get;set;} }

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

具体数据是:

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

在操作中,myData.prop2.ElementAt(0).name 为空。现在有什么问题?

4

1 回答 1

0

创建要发送的 JS 对象时,您将属性包装在myData不需要的属性中。尝试这个:

$.ajax({
    data: specificData
    // other settins...
});
于 2012-11-14T09:00:31.813 回答