【问题标题】:Passing JSON to MVC Controller?将 JSON 传递给 MVC 控制器?
【发布时间】:2017-01-03 20:26:20
【问题描述】:

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

【问题讨论】:

标签: javascript jquery json asp.net-mvc


【解决方案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 提交将作为 poco 自动反序列化为 FormData c# 类。因此,您应该能够在不进行任何修改的情况下使用 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; }       
} 

【讨论】:

    【解决方案2】:

    像这样更改ajax帖子;

    $.ajax({
            url: "@Url.Action("ExportJson")",
            type: "POST",
     //************************************
            data: {"json" : JSON.stringify(myObj)},
     //************************************
            contentType:"application/json",
            success: function (result) {
    
            }
        });
    

    【讨论】:

    • 使用 POST 时会出现错误“无效的 json 原语”,因此,将 ajax 类型:“POST”更改为“GET”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多