Как передать ko.observableArray в контроллер MVC? - PullRequest
0 голосов
/ 07 июля 2011

Я хочу передать массив строк из моей модели представления (в форме ko.observableArray) в контроллер в Asp.net MVC.

Поскольку ko.observableArray является объектом, а не массивом, его нельзя просто передать методом $.ajax и использовать в качестве массива на стороне контроллера.

Как передать данные в ko.observableArray в контроллер, чтобы я мог использовать их в качестве массива на стороне контроллера?

1 Ответ

6 голосов
/ 07 июля 2011

Knockout имеет две служебные функции, называемые ko.toJS и ko.toJSON.

var myPlainObject = ko.toJS(root), которые пройдут по вашему объекту и превратят все наблюдаемые в обычное свойство JavaScript.сделайте то же самое, а затем выполните JSON.stringify для результата.

Таким образом, вы можете использовать эти функции в вашей viewModel для получения простых объектов JavaScript.

Информация из документов здесь .

Если элементы в вашем observableArray не содержат observables, то вы можете просто получить базовый массив, выполнив 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));
                }
            }
        });
    }
};

Против действия типа:

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

Это соответствует тому, что вы пытаетесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...