【发布时间】:2016-04-24 11:00:04
【问题描述】:
我正在尝试通过 jquery post 发布一个 knockoutjs 视图模型
var $form = $('#barcodeTemplate form');
var data = ko.toJS(vm.Template);
$.post($form.attr('action'), data);
视图模型包含一些简单的属性和一个复杂的数组 对象。这是 JS 对象:
data: Object
Description: "abcde"
Fields: Array[2]
0: Object
Id: 1
Length: 5
Start: 2
Type: "Code"
1: Object
Id: 2
Length: 4
Start: 8
Type: "Price"
length: 2
Flag: "02"
Id: 1
Type: "Embedded"
当序列化为表单数据时,它看起来像这样:
Id:1
Type: "Embedded"
Description: "abcde"
Fields[0][Type]:"Code"
Fields[0][Start]:2
Fields[0][Length]:5
Fields[1][Type]:"Price"
Fields[1][Start]:8
Fields[1][Length]:4
在控制器端,基本属性正确反序列化(例如 Id、Type),并且数组有两个元素,但是在这两个元素上,所有属性(Type、Start 等)都是 0。
我怀疑这是因为表单元素在数组属性上使用方括号表示法,而不是点表示法,如
字段[0].类型
这是正确的吗?如果是这样,我该如何更改这种行为,以便 MVC 模型绑定器可以成功解码表单数据?
注意我也尝试过使用 ko.utils.postJson,但这更糟糕 - 数组完全是空的。
【问题讨论】:
-
您可以尝试使用 contentType: 'application/json; 发布它吗? charset=utf-8'?
-
您可以尝试检查这些值是否在您的 FormCollection 中吗?
-
请更新您的问题以包含重现:要么将
ko.toJS(vm.Template)替换为虚假数据,要么在您的代码中包含代表vm.Template。 -
您使用了错误的工具。您应该使用一个类似于魅力的 Web API 控制器来发送和接收 JSON 数据。一旦你在 JavaScript 中通过 AJAX 发送 JSON 是非常容易的。您可以使 JSON 与 MVC 控制器一起工作,但它会让您有些头疼(取决于 MVC 版本)。您可以谷歌了解如何执行此操作。使用 Web API,它就像开箱即用的魅力。
标签: jquery asp.net-mvc knockout.js