将ajax中的复杂对象发送到MVC

Posted

技术标签:

【中文标题】将ajax中的复杂对象发送到MVC【英文标题】:Sending complex object in ajax to MVC 【发布时间】:2015-08-29 10:07:43 【问题描述】:

发送复杂对象时,List<Order> 的值在我的控制器操作方法中返回为 null。有人可以帮助确定问题吗?我们需要传递带有索引的对象数组吗?

javascript

function OnCustomerClick() 
    //var orders = [];
    //orders.push( 'OrderId': '1', 'OrderBy': 'Saroj' );

    var complexObject = 
        FirstName: 'Saroj',
        LastName: 'K',
        //Orders : orders
        Orders: [ OrderId: 1, OrderBy: 'Saroj' ,  OrderId: 2, OrderBy: 'Kumar' ]
    ;

    var obj =  customer: complexObject ;
    var data2send = JSON.stringify(obj);

    $.ajax(
        type: "POST",
        url: 'Home/TestCustomer1',
        data: data2send,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (arg)  //call successfull
        ,
        error: function (xhr) 
            //error occurred
        
    );
;

MVC

 public ActionResult TestCustomer1(Customer customer)
    
        return Json(customer);
    

C#

public class Customer

    public string FirstName  get; set; 
    public string LastName  get; set; 
    List<order> Orders  get; set; 


public class order

    public int OrderId  get; set; 
    public string  OrderBy  get; set; 

【问题讨论】:

您可以尝试添加traditional: true, ajax 选项,但实际上它应该是var complexObject = FirstName: 'Saroj', LastName: 'K', Orders[0].OrderId: 1, Orders[0].OrderBy: 'Saroj', Orders[1].OrderId: 2, Orders[1].OrderBy: 'Kumar' 才能正确绑定到您的模型(并删除contentType: "application/json; charset=utf-8", 并使用data: complexObject, 【参考方案1】:

您需要使用 public 属性进行模型绑定。 Orders 目前没有访问修饰符,所以它是私有的。

public class Customer

    public string FirstName  get; set; 
    public string LastName  get; set; 
    public List<order> Orders  get; set;  // <----

除此之外,一切看起来都很好。

【讨论】:

以上是关于将ajax中的复杂对象发送到MVC的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JSONP 将复杂数组发送到 asp.net mvc 控制器

如何将两个数组作为 POST 请求参数从 AJAX 发送到 MVC 控制器(ASP .NET Core 3.1 剃须刀)?

如何在 ASP.Net MVC 5 中调用嵌套 ajax 调用并将对象数据发送到控制器

如何使用 ASP.NET MVC 通过 Ajax 将检查的行发送到服务器?

通过 jQuery.Ajax 向 MVC 控制器发送多个项目

ajax 将 null 发送到 MVC Api 控制器