将JSON传递给MVC控制器?

时间:2017-01-03 20:26:21

标签: javascript jquery json asp.net-mvc

我有一个带有嵌套数组的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))在浏览器控制台中显示正确的对象。

2 个答案:

答案 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) {

        }
    });