2016-11-02 94 views
1

我有動態生成的表單,所以我需要處理傳遞給控制器​​的未知數量的輸入。可以沒有預定義的模型(我假設)來處理這個,所以我認爲發送一個json字符串可能是最好的。將表單作爲json傳遞給控制器​​並解析

問題是解析控制器中的json到JObject。

這是我在使用ajax請求提交之前使用的。

var json = JSON.stringify($(this).serialize()); 

現在傳遞給控制器​​的字符串如下所示

"\"__RequestVerificationToken=FGhUgZXRTWcDqC-ffeMb7S2paAgFSUN4XyJl72qu85TD1GPpi69aGiyHzXBfHpb6XgBrGXAhtJz6NWka0XGK_JRSqpm-Q41tiYvJe1NO3J-_4leHroUvDp3VsWYMLFMm0&Form.ID=d7025ad7-745b-4898-ad40-350ef1d511ec&a5fbdde8-4c34-48e2-9a77-083c31eb1ae1=This+is+a+test\"" 

在控制器

JObject jo = JObject.Parse(json); //error 

foreach (var o in jo) 
{ 
    string key = o.Key; 
    JToken val = o.Value; 
} 

錯誤我得到

"Error reading JObject from JsonReader. Current JsonReader item is not an object: String. Path '' 
+0

爲什麼你必須使用JSON?這似乎是一個不必要的複雜。 'x-www-form-urlencoded'非常標準 - 尤其對於非AJAX請求 –

+0

@RoryMcCrossan你能舉一個例子嗎?這是通過ajax提交的。控制器無法使用預定義的模型,因爲控制器未知輸入。正在發送的數據使用輸入的ID作爲密鑰。 – Tsukasa

+0

您對一個字符串(['serialize'](http://api.jquery.com/serialize/))的結果調用JSON.stringify。因此,當您解析JSON時,會返回一個字符串,如錯誤所述。請參閱[使用jQuery將表單數據轉換爲JavaScript對象](http://stackoverflow.com/q/1184624/215552)瞭解如何從表單數據創建對象。 –

回答

1

夫婦的更好選項:

阿賈克斯data:有效載荷則只是你$(this).serialize()

+0

真棒謝謝你。這很容易。我用FormCollection去了。 – Tsukasa

相關問題