#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.