2011-07-27 10 views
5

Voy los plátanos tratando de averiguar cómo serializar esto (en MVC 3):¿Cómo serializo una matriz de objetos jQuery para JSON Post?

// 1. Cómo cargo la matriz productos en la vista:

var products = []; 
if (quantity > 0) {     
    products.push({ 'id': id, 'quantity': quantity }); 
} 

// 2. A continuación, he puesto un montón de valores, junto con los productos, así:

$.ajax({ 
    type: "POST", 
    url: '/Orders/Create/', 
    data: 
    { 
     'ShipToPersonId': shipToPersonId, 
     'ShipToPersonType': selectedPersonType, 
     'ShippingAddressId': shipToAddressId, 
     'ShippingInstructions': 'Not yet implemented', 
     'LineItems': products, 
     'OrderOwnerId': selectedOnBehalfOfPersonId 
    }, 
    dataType: "json", 
    success: function (data) { 
     alert('Saved: ' + data); 
    }, 
    error: function (data) { 
     alert('failed:' + data); 
    } 
}); 

// 3. Mi controlador se ve así:

public JsonResult Create(
          int ShipToPersonId, 
          string ShipToPersonType, 
          int ShippingAddressId, 
          string ShippingInstructions, 
          List<LineItem> LineItems, 
          int OrderOwnerId) 
    {...} 

// 4. La clase LineItem:

public class LineItem{ 
    public string id {get;set;} 
    public string quantity { get; set; } 
} 

En las funciones del controlador, todos los valores se pasan correctamente, a excepción de la lista LineItem; tiene el recuento correcto de elementos, sin embargo, los valores de id y cantidad son nulos.

He puesto la llamada a través violinista, y esto es lo que me sale:

[Fiddler Web Forms Ver]

================================= 
Body     | Value 
========================|======== 
LineItems[0][id]  | 50 
LineItems[0][quantity] | 10 
LineItems[1][id]  | 46 
LineItems[1][quantity] | 20 
LineItems[2][id]  | 48 
LineItems[2][quantity] | 30 
LineItems[3][id]  | 30 
LineItems[3][quantity] | 50 

[Ver violinista cadena de consulta]

ShipToPersonId=533 
&ShipToPersonType=Rep 
&ShippingAddressId=517 
&ShippingInstructions=Not+yet+implemented 
&LineItems%5B0%5D%5Bid%5D=50&LineItems%5B0%5D%5Bquantity%5D=10 
&LineItems%5B1%5D%5Bid%5D=46&LineItems%5B1%5D%5Bquantity%5D=20 
&LineItems%5B2%5D%5Bid%5D=48&LineItems%5B2%5D%5Bquantity%5D=30 
&LineItems%5B3%5D%5Bid%5D=30&LineItems%5B3%5D%5Bquantity%5D=50 
&OrderOwnerId=533 

Obviamente, la cadena serializada y el parámetro del controlador no son "compatibles". ¿No estoy formateando la matriz de productos correctamente en la vista, o es la lista de artículos de línea y la clase en el controlador que no están bien, o ambas cosas?

¿Alguien puede arrojar algo de luz sobre esto? ¡Gracias!

¿Alguien en esto?

Respuesta

0

Here es su respuesta. Parece que necesitas usar un atributo en la parte superior de tu acción o usar un complemento que serialice tu json en algo que el encuadernador de modelo predeterminado entienda.

Además, ¿ha probado JSON.stringify ({'foo', 'bar'}) en su objeto cuando lo establece como sus datos en su solicitud de AJAX?

Cuestiones relacionadas