我有點困惑什麼是你真的嘗試發送,所以我將描述這兩種情況。
你的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應該被綁定到該對象。
UPDATE
還有一個場景,從您的評論出現 - 張貼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作爲沒有問題的值(你可以在表單數據等簡單的價值以及)。
我需要接收後在的FormCollection和與編碼應用/ X WWW的窗體-urlencoded因爲我的JSON對象具有不直接映射到評論模型陣列和其它性質(在控制器然後我使用Json.Net到解析)。 MVC3不能映射我的JSON對象像Comment.List本機屬性{獲得;組; }。問題是其然後失敗時JSON.stringify()具有「=」值(顯然窗體-urlencoded使用德「=」,以限定值)FormCollecction。 –
jparaya
@jparaya FormCollection與表單編碼數據一起使用,而不是使用JSON。如果要在後消息JSON其內容類型是application/X WWW的窗體-urlencoded比它必須是一個形式字段的值,而不是實際體(否則你會打破HTTP協議)。我已經用這種情況更新了答案。 – tpeczek
感謝您的答覆和課程。我們總是發送我們的JSON對象沒有問題,主要是因爲內容是ID和Ids數組。現在我清楚內容類型。再次感謝! – jparaya