【问题标题】:How to use ajax to post json string to controller method?如何使用 ajax 将 json 字符串发布到控制器方法?
【发布时间】:2015-09-08 13:34:48
【问题描述】:

我希望能够将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');
        }
    },
});

【问题讨论】:

  • 删除contentType: 'application/json'并使用data: data,(没有JSON.stringify()然后将方法更改为public JsonResult Test(string prop1) {prop1将包含值'test'
  • @StephenMuecke,我删除了contentType 并使用了data,但仍然得到null。但是,我不能只使用Test(string prop1),因为 json 可能包含多个属性,并且这些属性在运行时可能是未知的。
  • 你在敲控制器吗?url: 'approot\Test', 应该是 url: '/approot/Test',(或者要正确操作,然后是 url: '@Ul.Action("Test", "approot")',
  • 请问成功函数(json){ if (json){alert("ok")}中方法返回了什么?

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


【解决方案1】:

您的操作方法需要一个字符串。创建一个 javascript 对象,为其赋予属性“data”并将您的数据对象字符串化以发送。

更新代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多