Knockoutjs可观察数组到List<;字符串>;

本文关键字:lt 字符串 gt List 观察 数组 Knockoutjs | 更新日期: 2023-09-27 18:15:46

我搜索了很多不同的选项,但不知道哪里出了问题。

我有一个knockoutjs视图模型,看起来像这样:

{"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使其成为一个简单的数组,但没有结果。

我相信这是基本的东西,我是初学knockoutjs的,但我已经做这件事太久了,我在网上找到的任何建议都无法提供帮助。

Knockoutjs可观察数组到List<;字符串>;

为了发送视图模型数据,您应该将视图模型数据转换为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
    }
});

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

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

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