我有一个带有嵌套数组的JSON对象,我想将其发送给控制器。
这是我的jQuery.ajax调用:
$.ajax({
url: "@Url.Action("ExportJson")",
type: "POST",
data: JSON.stringify(myObj),
contentType:"application/json",
success: function (result) {
}
});
控制器:
public ActionResult ExportJson(string json)
{
return null;
}
为什么json字符串在控制器中返回null?而console.log(JSON.stringify(myObj))在浏览器控制台中显示正确的对象。
答案 0 :(得分:1)
试试这个 -
考虑以下JSON数据。让我们假设json数据是从您尝试提交的任何形式中获得的。
var jsonData = {"FirstName":"John", "LastName":"Doe", "DoB":"01/01/1970",
[{"CompanyName":"Microsoft", "StartDate":"01/01/2010", "EndDate":"01/01/2011"},
{"CompanyName":"Apple Inc", "StartDate":"01/01/2011", "EndDate":"01/01/2012"}
]};
下面的ajax方法可以帮到你。确保指定POST类型,因为ajax方法默认使用GET方法。
$.ajax({
url:"@Url.Action("ExportJson")",
data: jsonData, //this could also be form data
type:"POST",
success:function(data){
//Do something:
}})
.done(function(data){
//data - response from server after save
})
.fail(){
alert("ajax error")
});

MVC控制器: 用HttpPost动词装饰Action方法。此操作方法仅处理来自浏览器的http post请求。来自浏览器的Ajax提交将自动反序列化为FormData c#类作为poco。因此,您应该能够使用jsnData对象而无需任何修改。
[HttpPost]
public ActionResult ExportJson(FormData jsnData)
{
//do something here
}
FormData类将是表示json数据的C#类:
public class FormData
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string DoB { get; set; }
public List<WorkExperience> workExperience { get; set; }
}
public class WorkExperience
{
public string CompanyName { get; set;}
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
答案 1 :(得分:0)
像这样更改ajax帖子;
$.ajax({
url: "@Url.Action("ExportJson")",
type: "POST",
//************************************
data: {"json" : JSON.stringify(myObj)},
//************************************
contentType:"application/json",
success: function (result) {
}
});