knockoutjs отправляет с проблемой ko.utils.postJson

#asp.net-mvc #knockout.js

#asp.net-mvc #knockout.js

Вопрос:

Я следил за http://blog.stevensanderson.com/2010/07/12/editing-a-variable-length-list-knockout-style / статья как отправить данные с помощью ko.utils.postJson и перейти к другому представлению из контроллера

Я использовал ko.utils.postJson(location.href, {model: ko.toJson(viewModel)}); для отправки данных, но модель, отправленная на сервер, имеет пустые свойства.

ko.utils.postJson(location.href, {model: viewModel}); тоже сбой.

Клиентская ViewModel обладает дополнительными свойствами, чем серверная модель, но я считаю, что если она работает с методом $ ajax post, она должна работать с KO post

Это сработало, если я передаю модель как в

 ko.utils.postJson(location.href, 
    {model: {P1:this.p1(), P2:this.p2(), P3: this.p3()}}); 
  

Должен ли я сопоставлять каждое свойство перед отправкой? Это также действительно сбивает с толку, когда использовать () для свойств ViewModel

Серверный код

  [HttpPost]
        public ActionResult SearchProperty([FromJson]MyModel model)
        {
            try
            {
                return View("XYZ", model);
            }
            catch (Exception e)
            {
            }
        }
  

Ответ №1:

Knockout предоставляет служебную функцию, которая превратит объект, содержащий наблюдаемые, в обычный объект JavaScript. Служебная функция является ko.toJS . Итак, если вы сделали:

    { model: ko.toJS(viewModel) }
  

Затем он обработал бы разворачивание всех ваших наблюдаемых.

Кроме того, существует другая функция, ko.toJSON которая выполнит ko.toJS , а затем выполнит JSON.stringify с результатом. Это полезно, когда вам действительно нужен JSON вместо объекта JavaScript.