Knockoutjs可观察数组到List <string> </string>

时间:2013-05-28 11:53:13

标签: c# asp.net-mvc-4 knockout.js

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

我有一个knockoutjs viewmodel,看起来像这样:

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

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

除了ChosenCategoryValues之外,一切都会被传回控制器。这是客户端的observableArray,服务器端的List<string>。它总是返回null,unles字符串包含第一个项目中的所有值,然后我将对其进行字符串解析。

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

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

我确信这是基本的东西,我是淘汰赛的新手,但我现在已经很久了,而且我在网上找到的建议都没有提供帮助。

2 个答案:

答案 0 :(得分:2)

为了发送视图模型数据,您应该将视图模型数据转换为JSON(记住 - 可观察的是简单的函数),这是通过调用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 :(得分:1)

正如我上面评论的那样,您应该使用fiddler来查看请求。我怀疑你的数据不是以json的形式发送的。当您的值作为普通的html post值发送时,通常不会映射该集合。

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

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