1

jquery を使用して ajax ポスト リクエストを ASP MVC4 コントローラーに送信していますが、ネストされたオブジェクトは空です。

jquery.Post を使用して URL エンコード形式で投稿すると、データ モデルは期待どおりに入力されますが、json 形式を使用して jquery.ajax を使用して同じことをしようとすると、受け取ったモデルには、ネストされたプロパティを除くすべてのプロパティが入力されます。

これらは、フィドラーによってキャプチャされたリクエスト データです。

ポストを使用して

Code=dfs&Name=sdf&Country.Code=PKR&Remarks=dfsdf

jsonの使用

{"Code":"dsf","Name":"sdf","Country.Code":"PKR","Remarks":"dfsdf"}

ありがとう

編集

public class City : IKeyed<int>{
    public virtual int Id { get; protected set; }
    public virtual string Code { get; set; }
    public virtual string Name { get; set; }
    public virtual Country Country { get; set; }
    public virtual string Remarks { get; set; }
    public virtual bool IsActive { get; set; }
}

public class Country : IKeyed<int> {
    public virtual int Id { get; protected set; }
    public virtual string Name { get; set; }
    public virtual string Code { get; set; }
}

$.ajax({
                url: url,
                type: method,
                dataType: 'json',
                data: data,
                contentType: 'application/json; charset=utf-8'

});

4

4 に答える 4

1

書き込み

"Country.Code":"PKR"

実際には、 Codeプロパティを持つCountryオブジェクトがあると言います。そのようにプロパティを書く

"CountryCode":"PKR"

私が見る限り、それがあなたが投稿しようとしているjsonの唯一の問題です。

または、CodeをCountryオブジェクトの実際のプロパティにします。

"Country" : { "Code" : PKR" }
于 2012-11-10T12:43:39.603 に答える
1

URL エンコードされたフォーム バインディングと JSON バインディングは大きく異なります。実際、JSON はオブジェクトに逆シリアル化されているだけで、キーと値のペアのような名前でマップされていません。ネストされたプロパティをバインドするには、JSON にネストされたオブジェクトが必要です。

{"Code":"dsf","Name":"sdf","Country":{"Code":"PKR"},"Remarks":"dfsdf"}
于 2012-11-10T12:47:00.177 に答える
0

json でオブジェクトを手動で構築しないでください。JSON.stringifyを活用します。

var obj = new Object();
obj.Code = "dsf";
obj.Name = "sdf";
obj.Country = new Object();
obj.Country.Code = "PKR";
obj.Remarks = "dfsdf"; 

JSON.stringify(obj) // gives you the object serialized to json format
于 2012-11-10T12:58:02.550 に答える