【问题标题】:JSON passed to controller has no value传递给控制器​​的 JSON 没有任何价值
【发布时间】:2014-05-21 10:32:18
【问题描述】:

我无法将我的 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,而不需要像我的字符串数据这样的参数,我只是把它扔在那里试图弄清楚我是否得到任何东西。数据为空,例程显示 0 和空值。我错过了什么?

【问题讨论】:

  • 您是否确认它访问了正确的 URL?触发请求时,firebug 在网络中向您显示什么?也许尝试 / 为 url 的前缀

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


【解决方案1】:

如果t_routine代表服务器端类型

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

那么在ko.toJSON 这样的结果上调用JSON.stringify 可能就足够了

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 { }
        }
    })
}

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

【讨论】:

  • 看来我只需要模型参数上的 []。 JSON.stringify 导致参数为空,但使用默认的 ko.toJSON 我在控制器中得到了我需要的东西。把我的头撞在墙上一段时间后问题解决了,也提示了。非常感谢...
猜你喜欢
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 2017-11-14
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
相关资源
最近更新 更多