我对你真正想要发送的内容有点困惑,所以我将描述这两种情况。
您的 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 应该绑定到对象。
更新
您的评论中还出现了另一种情况 - 将 JSON 作为表单中的字段值发布。要实现这一点,您应该首先将 JavaScript 更改为如下所示:
$.post('@Url.Action("PostComment")', { jsonComment: JSON.stringify({ Id: 32, Title: '=', Desc: '=' }) }, function (data) {
...
});
现在可以通过以下两种方式之一访问原始 JSON FormCollection
:
[HttpPost]
public ActionResult PostComment(FormCollection fields)
{
string jsonComment = fields["jsonComment"];
...
}
或直接按名称:
[HttpPost]
public ActionResult PostComment(string jsonComment)
{
...
}
这种包装是必需的,因为FromCollection
不能直接使用 JSON,它不是为它设计的。您需要发布正确的表单数据,但您可以毫无问题地将 JSON 作为值(并且您也可以在该表单数据中包含其他简单值)。