本当に何を送信しようとしているのか少し混乱したので、両方のケースについて説明します。
JavaScript スニペットとアクション メソッドは、送信していることを示していますapplication/x-www-form-urlencoded
。その場合JSON.stringify
、データに対して を使用しないでください。すべて正常に動作するはずです。
しかし、本当に JSON ( ) を送信したい場合はapplication/json
、最初に JavaScript を少し変更する必要があります。
$.ajax({
type: 'POST',
url: '@Url.Action("PostComment")',
data: JSON.stringify( { Id: 32, Title: '=', Desc: '=' }),
contentType: 'application/json',
success: function(result) {
...
}
});
エンティティのクラスも取得する必要があります (データにも使用できapplication/x-www-form-urlencoded
ます)。
public class Comment
{
public int Id { get; set; }
public string Title { get; set; }
public string Desc { get; set; }
}
これにより、アクション メソッドを次のように変更できます (これもapplication/x-www-form-urlencoded
データに対して行うことができます)。
public ActionResult PostComment(Comment comment)
{
...
}
ASP.NET MVC はデータを適切にバインドします。データを正しい形式で正しいコンテンツ タイプで送信していることと、JSON をオブジェクトにバインドする必要があることを確認してください。
アップデート
あなたのコメントから出てきたもう 1 つのシナリオがあります - フォームのフィールドの値として JSON を投稿します。これを実現するには、JavaScript を次のように変更することから始める必要があります。
$.post('@Url.Action("PostComment")', { jsonComment: JSON.stringify({ Id: 32, Title: '=', Desc: '=' }) }, function (data) {
...
});
これで、次の 2 つの方法のいずれかで未加工の JSON にアクセスできますFormCollection
。
[HttpPost]
public ActionResult PostComment(FormCollection fields)
{
string jsonComment = fields["jsonComment"];
...
}
または直接名前で:
[HttpPost]
public ActionResult PostComment(string jsonComment)
{
...
}
JSON を直接操作できないため、このラッピングが必要ですFromCollection
。JSON 用に設計されていません。適切なフォーム データを投稿する必要がありますが、JSON を値として問題なく使用できます (また、そのフォーム データに他の単純な値を含めることもできます)。