如何使用ajax将json字符串发布到控制器方法?

时间:2015-06-22 22:51:19

标签: jquery asp.net-mvc visual-studio-2013 asp.net-mvc-5

我希望能够post一个json字符串来控制动作,但它总是收到字符串null。如果我为控制器方法创建一个视图模型,它可以工作,但这不是我想要的,因为要维护太多的视图模型。

控制器

[HttpPost]
public JsonResult Test(string json){
    // debugger stops here, but json is null. why?
    dynamic item = Json.Parse(json);
    var temp = item.prop1;
    return Json(false, JsonRequestBehavior.DenyGet);
}

的javascript

var data = {
    prop1: 'test',
    prop2: 'test2',
};

$.ajax({
    type: 'post',
    dataType: 'json',
    url: 'approot\Test',
    data: JSON.stringify(data),
    contentType: 'application/json',
    success: function(json) {
        if (json) {
            alert('ok');
        } else {
            alert('failed');
        }
    },
});

感谢Stephen Muecke的暗示,我让它以这种方式运作:

控制器

[HttpPost]
public JsonResult Test(string json){
    dynamic item = JObject.Parse(json);
    var temp = item.prop1;
    return Json(false, JsonRequestBehavior.DenyGet);
}

的javascript

var json = {
    prop1: 'test',
    prop2: 'test2',
};

var data = {
    json: JSON.stringify(json),
};

$.ajax({
    type: 'post',
    dataType: 'json',
    url: 'approot\Test',
    data: data,
    // contentType: 'application/json', <-- no need this.
    success: function(json) {
        if (json) {
            alert('ok');
        } else {
            alert('failed');
        }
    },
});

1 个答案:

答案 0 :(得分:3)

您的操作方法需要一个字符串。创建一个javascript对象,为它提供属性&#34; data&#34;并对您的数据对象进行字符串化以便发送。

更新的代码:

$.ajax({
    type: 'post',
    dataType: 'json',
    url: 'approot\Test',
    data: { "json": JSON.stringify(data) },
    success: function (json) {
        if (json) {
            alert('ok');
        } else {
            alert('failed');
        }
    },
});