使用Ajax将复杂对象发送到MVC

8

在发送复杂对象时,我的控制器操作方法中的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; }
}

4
您可以尝试添加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, - user3559349
@user3559349 这个评论帮了我,因为我遇到了类似的情况——将List<>类型属性的所有数据放入与其余属性相同的对象中,但使用数组符号。我试图嵌套对象,但完全行不通。 - Literate Corvette
1个回答

10

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

public class Customer
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public List<order> Orders { get; set; } // <----
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接