1

私はasp.netmvcを使用しています。私はこの行動を起こします:

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

問題は、Createアクション内で「data」変数がインスタンス化されているが、その属性がすべてnullであるということです。私は何か間違ったことをしていますか?

UPDATE
@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;}
}

そしてspecificDataは:

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

アクションでは、myData.prop2.ElementAt(0).nameはnullです。今何が問題なのですか?

4

1 に答える 1

0

送信するJSオブジェクトを作成するときは、myData必須ではないプロパティでプロパティをラップしています。これを試して:

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