将json对象发布到ASP MVC无法正常工作

时间:2014-03-28 04:11:27

标签: c# ajax json asp.net-mvc-4 json.net

我试图将自定义Json对象发布到ASP.NET MVC控制器,但无法正常工作。

我的JS代码是:

var myData = {
    "Message": "Another message",
    "Value": 4,
    "FirstItem": {
        "ItemName": "Este es el primer Item"
    },
    "SecondItem": {
        "ItemName": "Este es el segundo Item"
    }
};

$('.clickeable').click(function () {
    $.ajax({
        type: 'POST',
        dataType: 'json',
        data: myData,
        url: '@Url.Action("PostSomething")',
        success: function () {
            console.info('Success');
        },
        error: function () {
            console.info('Error');
        }
    });
});

在我的控制器中:

[HttpPost]
public JsonResult PostSomething(SimpleModel model)
{
    return Json(true);
}

public class SimpleModel
{
    public string Message { get; set; }
    public int Value { get; set; }
    public SimpleItem FirstItem { get; set; }
    public SimpleItem SecondItem { get; set; }
}

public class SimpleItem
{
    public string ItemName { get; set; }
    //more depth,
}

获取HttpPost时,属性FirstItem和SecondItem始终为null。 Posting JsonObject

提前致谢。

3 个答案:

答案 0 :(得分:3)

I have tried your scenario.I found out solution that

var myData = {
    "Message": "Another message",
    "Value": 4,
    "FirstItem": {
        "ItemName": "Este es el primer Item"
    },
    "SecondItem": {
        "ItemName": "Este es el segundo Item"
    }
};

    var obj = { 'model': myData };
    var val=JSON.stringify(obj);

$('.clickeable').click(function () {
    $.ajax({
        type: 'POST',
        dataType: 'json',
        data: val,
        contentType:"application/json",
        url: '@Url.Action("PostSomething")',
        success: function () {
            console.info('Success');
        },
        error: function () {
            console.info('Error');
        }
    });
});
在您的代码中

您没有指定内容类型。只需尝试此

答案 1 :(得分:1)

不是一个合适的解决方案,但请尝试:

[HttpPost]
public JsonResult PostSomething(string Message, int Value,SimpleItem FirstItem,SimpleItem  SecondItem )
{
    return Json(true);
}

答案 2 :(得分:1)

这是因为jQuery如何将你的JSON对象转换成POST参数会让C#读取它的能力混乱(jQuery试图将javascript对象的属性映射到帖子上的变量,MVC很聪明只要原始JSON发布了它就足够了。

最简单的解决方案是首先对其进行字符串化,并且应该正确地反序列化(data: JSON.stringify(myData))。

请注意,如果您支持旧浏览器,则需要为该功能添加json2.js库,但它已内置于所有现代浏览器中。