【问题标题】:Pass form as json to controller and parse将表单作为 json 传递给控制器​​并解析
【发布时间】: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


【解决方案1】:

几个更好的选择:

Ajax data: 有效负载就是你的$(this).serialize()

【讨论】:

  • 太棒了,谢谢。这要容易得多。我选择了 FormCollection。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
相关资源
最近更新 更多