2012-10-03 45 views
0

當我嘗試做這樣的事情JSON:的FormCollection無法處理與 「=」

$.post('@Url.Action("PostComment")', {"Id":32,"Title":"=","Desc":"=",}, function (data) { 
    .... 
} 

我控制器接收中的FormCollection這個值:

public ActionResult PostComment(FormCollection comment) { 
    .... 
} 

Strangelly值的樣子:

(值爲:32,標題:「=」,描述:「=」})

然而,當字符比「=」的對象被正確地接收其它。

我怎麼能發送帶有這種特殊字符的JSON對象?好像MVC3無法處理這些值...

回答

1

我有點困惑什麼是你真的嘗試發送,所以我將描述這兩種情況。

你的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作爲沒有問題的值(你可以在表單數據等簡單的價值以及)。

+0

我需要接收後在的FormCollection和與編碼應用/ X WWW的窗體-urlencoded因爲我的JSON對象具有不直接映射到評論模型陣列和其它性質(在控制器然後我使用Json.Net到解析)。 MVC3不能映射我的JSON對象像Comment.List 本機屬性{獲得;組; }。問題是其然後失敗時JSON.stringify()具有「=」值(顯然窗體-urlencoded使用德「=」,以限定值)FormCollecction。 – jparaya

+0

@jparaya FormCollection與表單編碼數據一起使用,而不是使用JSON。如果要在後消息JSON其內容類型是application/X WWW的窗體-urlencoded比它必須是一個形式字段的值,而不是實際體(否則你會打破HTTP協議)。我已經用這種情況更新了答案。 – tpeczek

+0

感謝您的答覆和課程。我們總是發送我們的JSON對象沒有問題,主要是因爲內容是ID和Ids數組。現在我清楚內容類型。再次感謝! – jparaya