MVC 3如何将自定义JS对象传递给控制器​​?

时间:2012-03-02 09:05:48

标签: jquery asp.net-mvc-3

  

可能重复:
  Passing a collection of objects to MVC controller using $.post

我有那个班:

public class MyClass 
{
    public int BookID { get; set; }

    public List<SelectedBookFormat> SelectedFormats { get; set; }

    public SelectedBasketBook()
    {
        SelectedFormats = new List<SelectedBookFormat>();
    }
}

public class SelectedBookFormat
{
    public int ID { get; set; }
    public int Quantity { get; set; }
    public double Price { get; set; }
}

并采取行动:

public JsonResult Add(MyClass model)
{
...
}

我想从客户端发布该生成的类:

(我生成那个类对象,然后我使用JSON.stringify()方法)

model   {"BookID":"1","SelectedFormats":[{"ID":"4","Quantity":"34","Price":"44"},{"ID":"1","Quantity":"1","Price":"11"}]}

JS:

$.post('/Add', { 
                model : JSON.stringify({ BookID: '@Model.BookID', 
                                         SelectedFormats : formatsTab }) },
        function(res){}
                });

但是传递的对象在服务器端是空的,为什么?

1 个答案:

答案 0 :(得分:3)

var data = {};
data.BookId = 4;

var format = { };
format.ID = 3;
format.Quantity = 4;
format.Price = 2.2;

data.SelectedFormats = [];
data.SelectedFormats.push(format);

return $.ajax({
    type: 'POST',
    url: 'YourController/YourAction',
    dataType: 'json',
    traditional: true,
    data: {
        model: data
    }
});

对我而言,救世主一直是traditional: true

聚苯乙烯。在服务器端,似乎不需要属性,因此您可以将它们更改为字段,因此使用小写字母进行写入。然后它将匹配JS的写作风格,并仍然在服务器端有效。这当然是品味问题。