ASP.NET MVC3コントローラアクションメソッドにいくつかのJSONデータを送信しようとしていますが、何をしても機能しません。JSONデータをコントローラアクションに送信するASP.NET MVC
POST http://localhost:51492/Home/GetData HTTP/1.1
Host: localhost:51492
Connection: keep-alive
Content-Length: 171
Origin: http://localhost:51492
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
Content-Type: application/json; charset=UTF-8;
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://localhost:51492/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
{"Filters":[{"Field":3,"Operator":0,"Values":["30.01.2012.","30.01.2012."]},{"Field":2,"Operator":0,"Values":["-1"]},{"Field":0,"Operator":0,"Values":["some-string"]}]}
私のC#コード:
$.ajax({
url: '/Home/GetData',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8;",
data: JSON.stringify(filters_data),
success: function (data) {
alert(data);
}
});
フィドラーは、このような要求を示しています。ここ
は私のAJAX呼び出しである(それは json2.jsからJSON.stringifyメソッドを使用しています)[HttpPost]
public string GetData(QueryFilters filters)
{
return "Ho ho ho and a bottle of rum.";
}
[Serializable]
public enum Fields
{
A,
B,
C,
D
}
[Serializable]
public enum FilterOperator
{
Is,
Between,
GreaterOrEqual,
}
[Serializable]
public class QueryFilter
{
public Fields Field { get; set; }
public FilterOperator Operator { get; set; }
public List<string> Values { get; set; }
}
[Serializable]
public class QueryFilters
{
public List<QueryFilter> Filters { get; set; }
}
global.asax.csのApplication_Start()メソッドに次の行を追加しました:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
アクションメソッド 'GetData'のブレークポイントはヒットしますが、Filtersプロパティの値はnullです。何か案は?
もう1つの注意:私ははるかに単純なオブジェクトを渡してみました:Person - properties string Nameとint Age - 同じ結果を示します - 自動モデル結合が動作していないように見えますが、それを確認する方法。
+1よく目に付きます。私は私の答えで参照したものを見つけることができなかったので、それを削除しました... –
ありがとうございました!私はどれほど欲求不満を抱いているのか、何十億もの違うことを試してみることができず、簡単な命名の問題であることが分かりました。 – skali
まあまあ、私は遠くにこれを見てきましたが、もちろん、それはスタックにあります! –