3

我搜索了高低,并尝试了许多不同的选项,但无法弄清楚这里出了什么问题。

我有一个 knockoutjs 视图模型,如下所示:

{"Id":0,"Type":"post","Title":"adsf","AuthorId":0,"Description":"adsfadsf","ChosenCategoryValues":["7","8","9"]}

(为简洁起见省略了一些字段)

除了 ChosenCategoryValues,一切都很好地传回了控制器。那是客户端的 observableArray,List<string>服务器端的 a。它总是返回 null,除非字符串包含第一项中的所有值,然后我必须对其进行字符串解析。

$.post("/serverurl", viewmodel, function (response) { do some stuff }, "json");是它被发送到服务器的方式。

我试过 ko.toJS 使它成为一个简单的数组,但没有结果。

我确定这是基本的东西,我是 knockoutjs 的新手,但我已经在这个领域工作了太久,而且我在网上找到的任何建议都无法提供帮助。

4

2 回答 2

2

为了发送视图模型数据,您应该将视图模型数据转换为 JSON(请记住 - 可观察对象是简单的函数),这是通过调用ko.toJSON()函数来实现的。

您还需要告诉服务器您正在发送 JSON 数据。您无法使用 jQuerypost()方法实现它 - dataType参数仅影响预期的服务器响应类型,但不影响请求内容类型。因此,只需使用 jQueryajax()方法:

$.ajax({
    url: '/serverurl',
    type: 'POST',
    data: ko.toJSON(viewmodel),
    contentType: 'application/json',
    success: function(response) {
        // do some stuff
    }
});
于 2013-05-28T13:50:19.220 回答
1

正如我上面评论的那样,您应该使用提琴手来查看请求。我怀疑您的数据没有以 json 格式发送。当您的值作为普通的 html 帖子值发送时,通常不会映射该集合。

我建议创建要发送到服务器的实际 json,JSON.stringify如下所示:

$.post("/serverurl", JSON.stringify(viewmodel), function (response) { do some stuff }, "json");
于 2013-05-28T12:43:41.707 回答