2014-03-28 157 views
0

我想将自定义Json对象发布到ASP.NET MVC控制器,但无法正常工作。将json对象发布到ASP 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始终是零。 Posting JsonObject

在此先感谢。

回答

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'); 
     } 
    }); 
}); 
在你的代码

你不指定内容type.Just试试这个

1

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

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

这是因为对jQuery会将您的JSON对象为POST参数弄乱了的C#读它(jQuery的尝试JavaScript对象的变量属性映射能力在这篇文章中,MVC足够聪明,尽管只有原始的JSON发布了它)。

最简单的解决方案就是先将其串联起来,并且它应该正确反序列化(data: JSON.stringify(myData))。

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