如何将ko.observableArray传递给MVC控制器?

nel*_*ong 0 asp.net-mvc-3 knockout.js

我想从我的视图模型(以一种形式ko.observableArray)传递一个字符串数组到Asp.net MVC中的控制器.

由于它ko.observableArray是一个对象而不是数组,它不能简单地通过该$.ajax方法传递并在控制器端用作数组.

如何将数据传递ko.observableArray给控制器,以便在控制器端将其用作阵列?

RP *_*yer 6

Knockout有两个实用函数叫做ko.toJSko.toJSON.

var myPlainObject = ko.toJS(root) 将遍历您的对象并将任何observable转换为纯JavaScript属性.

var myJSONstring = ko.toJSON(root)会做同样的事情,然后JSON.stringify对结果做一个.

因此,您可以在viewModel上使用这些函数来获取纯JavaScript对象.

来自这里的文档的信息.

如果observableArray中的项不包含observable,那么你可以简单地通过执行来检索底层数组 myObservableArray()

更新:根据评论.这对我来说很好:

var viewModel = {
    items: ko.observableArray(["one", "two", "three", "four"]),
    sendItems: function() {
          $.ajax({  
            type: "POST",
            url: "@Url.Action("Test")",
            data: ko.toJSON(viewModel.items),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                if (data) {
                    alert(ko.toJSON(data));
                }
            }
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

反对像这样的行动:

    //just echo back data
    public JsonResult Test(List<String> myList)
    {
        return Json(myList);
    }
Run Code Online (Sandbox Code Playgroud)

这符合您的尝试吗?