【发布时间】:2016-11-02 17:17:18
【问题描述】:
我已经动态生成表单,因此我需要处理传递给控制器的未知数量的输入。可能没有预定义的模型(我假设)来处理这个问题,所以我认为发送一个 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 ''
【问题讨论】:
-
为什么一定要使用 JSON?这似乎是一个不必要的并发症。
x-www-form-urlencoded非常标准 - 特别是对于非 AJAX 请求 -
@RoryMcCrossan 你能举个例子吗?这是通过ajax提交的。控制器不能使用预定义模型,因为控制器不知道输入。正在发送的数据使用输入的 ID 作为键。
-
您正在对字符串调用 JSON.stringify(
serialize的结果)。因此,当您解析 JSON 时,它会返回一个字符串,如错误所述。请参阅Convert form data to JavaScript object with jQuery 了解如何从表单数据中创建对象。 -
@MikeMcCaughan 如果我拿走 JSON.stringify 我会得到
Unexpected character encountered while parsing value: _. Path '' -
The controller can't use a predefined model because the inputs are unknown to the controller.那么为什么不直接遍历Request.Params呢?
标签: javascript c# jquery json