【问题标题】:jquery post form data and MVC model binderjquery 发布表单数据和 MVC 模型绑定器
【发布时间】: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


【解决方案1】:

我尝试了各种建议,但最后放弃了,只是决定做一个普通的表单帖子,没有 ajax 的东西。这意味着在表单元素剔除管理上设置正确的名称属性,但它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多