knockoutjs提交ko.utils.postJson问题

Pin*_*hah 3 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()}}); 
Run Code Online (Sandbox Code Playgroud)

我必须在提交前映射每个属性吗?当使用()用于viewModel属性时,它也非常令人困惑

服务器代码

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

RP *_*yer 5

Knockout提供了一个实用程序函数,它将包含observable的对象转换为纯JavaScript对象.效用函数是ko.toJS.所以,如果你这样做了:

   { model: ko.toJS(viewModel) }
Run Code Online (Sandbox Code Playgroud)

然后,它将处理展开所有可观察量.

此外,还有另一个函数ko.toJSON可以执行a ko.toJS然后JSON.stringify对结果执行操作.当您真正需要JSON而不是JavaScript对象时,这非常有用.