現在、MVC 3 アプリのビューからコントローラーに JSON オブジェクトを投稿しようとしていますが、リクエストからのデータがコントローラー アクションのモデル パラメーターにバインドされることを期待しています。ただし、HTTP POST 要求を調べると、データがクエリ文字列として渡されているように見え、その理由がわかりません (これはまったく新しいことです)。
ここに私のPOSTリクエストがあります:
$.ajax({
type: 'POST',
url: "Test/Add",
data: { Name: name, Age: age },
success: function (data) {
console.log("success");
},
error: function (xhr, data, message) {
console.log(data + ": " + message);
},
dataType: "json"
});
これが私のコントローラーからのコードで、その後にバインドしようとしているモデルのコードが続きます。
[HttpPost]
public ActionResult Add(PersonModel person)
{
System.Threading.Thread.Sleep(1000);
return View();
}
// person model:
public class Person {
public string Name {get;set;}
public int Age {get;set;}
}
これはフィドラーからのリクエストです - 不明な部分をハイライトしました:
コンテンツ タイプは「application/json」であり、データはクエリ文字列のようには見えないだろうと考えました-次のようになると思いました:
{
Name: "James",
Age: 13
}
最終的な問題は、コントローラー アクションにブレークポイントを設定すると、データが入力された Person オブジェクトが表示されることを期待していますが、常に null であるということです。署名を次のように置き換えると(object name, object age)
、パラメーターの値が取得されます (両方の文字列配列 - name は、「James」に等しい 1 つの要素を持つ文字列配列です)。
私が間違っていたアイデアはありますか?
ああ、参考までに、私は実際には 13 歳ではありません。それらは私がマッシュした最初の数字でした。
ありがとう!
ジェームズ