【问题标题】:unable to get array from ajax to controller无法从 ajax 获取数组到控制器
【发布时间】:2018-06-05 17:57:39
【问题描述】:

我有一个对象数组,我使用 ajax 从视图传递到控制器。 数组数据为:

我的 ActionMethod 是:

public JsonResult AddQuestionsToStep(long stepId, string questionText, string questionType, string correctAnswer = "", List<QuestionOption> choices = null)

我正在接收其他变量数据和选择数组的计数,但选择数组中的数据未映射。即,在客户端具有值的 OptionName 在服务器端为空。我做错了什么?

【问题讨论】:

  • 你能发布你如何构建选择对象的代码吗?从您的屏幕截图看来, OptionId 包含函数而不是字符串
  • 我正在使用 knockoutJs。即使OptionId是一个函数,它不应该映射OptionName属性吗?
  • 实际上,您正在尝试发送 javascript 对象数组,我认为您的后端无论如何都无法处理。尝试将其作为 JSON.stringify(choices) 发送并在后端解析它
  • 当我发送 JSON.stringify(choices) 时,它甚至没有收到 List&lt;QuestionOption&gt; choices 参数中的计数。让我试试动态JObject.Parse(choice);
  • 是的,因为您正在获取对象数组的字符串表示形式。在您的原始代码中,您收到计数,因为您正在发送对象数组,但它们都是未定义的,因为您无法发布 javascript 对象数组。

标签: jquery ajax asp.net-mvc knockout.js


【解决方案1】:

由于您的 choices 是一个 javascript 对象数组,请将其序列化并在您的后端解析:

choices: JSON.stringify(choices)

在您的后端只需解析 json:

List<QuestionOption> choices = (List<QuestionOption>) JsonConvert.DeserializeObject(choicesJson, typeof(List<QuestionOption>));

【讨论】:

  • 谢谢迈克,它成功了!我应该早点发布问题,我浪费了一整天。
  • 顺便说一句。如果您不介意,请将用于解析它的行发布到您的后端,这样我就可以将 asp.net 代码更新为有效解决方案的答案,我只是盲目猜测 asp 代码
  • 当然,我使用List&lt;QuestionOption&gt; choices = (List&lt;QuestionOption&gt;) JsonConvert.DeserializeObject(choicesJson, typeof(List&lt;QuestionOption&gt;));解析
猜你喜欢
  • 2021-09-30
  • 1970-01-01
  • 2018-03-16
  • 2021-04-01
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 2020-09-24
相关资源
最近更新 更多