传递给控制器​​的JSON没有任何价值

时间:2014-04-08 15:48:06

标签: json model-view-controller knockout.js

我无法将JSON提供给我的控制器,我无法弄清楚为什么我在javascript中获得的值不会被传递给控制器​​。这是我的javascript中的ajax帖子:

this.save = function () {
        var data = ko.toJSON(this.Routines);
        $.ajax({
            type: 'POST',
            url: "CreateJson",
            data: data,
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function (result) {
                if (!result.success)
                    alert("test")
                else { }
            }
        })
    }

现在数据包含

[{"routine_name":"new routine","duration":"20","rest":"10","rounds":1}] 

这就是我想要的,但控制器什么也没显示。这是我的控制器

[HttpPost]
    public JsonResult CreateJson(t_routine routine, string data)
    {

        var message = "success";
        return Json(message);
    }

据我了解,MVC 3+自动接收JSON而不需要像我的字符串数据这样的参数,我只是把它扔在那里试图弄清楚我是否得到任何东西。 data为null,例程显示0和null,值为null。我错过了什么?

1 个答案:

答案 0 :(得分:0)

如果t_routine代表

的服务器端类型
[{"routine_name":"new routine","duration":"20","rest":"10","rounds":1}]

然后就像{/ 1>}这样的JSON.stringify结果上调用ko.toJSON就足够了

this.save = function () {
    var data = JSON.stringify(ko.toJSON(this.Routines));
    $.ajax({
        type: 'POST',
        url: "CreateJson",
        data: data,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (result) {
            if (!result.success)
                alert("test")
            else { }
        }
    })
}

您的控制器操作上的数据参数不需要,您很可能需要将t_routine参数更改为t_routine[]