Knockoutjs可观察数组转换为List<string>

3

我四处寻找,尝试了许多不同的选项,但是无法弄清楚这里出了什么问题。

我有一个knockoutjs视图模型,它长这样:

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

简略了一些字段

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

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

我已经尝试过ko.toJS使其成为简单的数组,但没有任何结果。

我肯定这是基础知识,我是knockoutjs的新手,但我已经在这里做了太长时间了,我在网上找到的所有建议都无法帮助我。


在页面加载方法中的$.pos之前尝试调用$.ajaxSetup({ traditional: true }); - nemesv
1
你是否使用过 Fiddler 查看请求?实际的 JSON 是否在请求中传输,还是作为 HTTP 表单值传递的? - Arjan Einbu
2个回答

2
为了发送视图模型数据,您需要将视图模型数据转换为 JSON 格式(请记住 - observables 只是简单的函数),这可以通过调用 ko.toJSON() 函数来实现。
此外,您需要告诉服务器,您正在发送 JSON 数据。您无法使用 jQuery 的 post() 方法来实现这一点 - dataType 参数仅影响预期的服务器响应类型,但它不影响请求内容类型。所以,只需使用 jQuery 的 ajax() 方法即可:
$.ajax({
    url: '/serverurl',
    type: 'POST',
    data: ko.toJSON(viewmodel),
    contentType: 'application/json',
    success: function(response) {
        // do some stuff
    }
});

1

如我上面所评论的,你应该使用 fiddler 查看请求。我怀疑你的数据没有以 json 的形式发送。当你的值被作为普通的 html post 值发送时,通常不会进行映射。

我建议按照这里所示使用 JSON.stringify 创建要发送到服务器的实际 json:

$.post("/serverurl", JSON.stringify(viewmodel), function (response) { do some stuff }, "json");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接