2011-07-17 34 views
7

Estamos tratando de enviar una colección de objetos desde nuestra página a nuestro controlador (MVC 3) usando json y la función jQuery .post. A continuación está nuestro código js y las definiciones de controlador y objeto.

El problema es que mientras el objeto se envía correctamente a nuestro controlador, sus variables miembro no se están llenando. La lista "Coords" tiene el número apropiado de objetos "Coord" pero las variables miembro de cada objeto Coord se rellenan con cero (no nulo) en lugar de los valores que estamos pasando. Ver la captura de pantalla:

Cualquier idea qué es incorrecto con nuestra implementación?

¡Gracias de antemano!

enter image description here

Coord1 = { "X": 100, "Y": 200 }; 
Coord2 = { "X": 300, "Y": 400 }; 

zoneData = { "Color": "#D8F834", "Name": "new zone", "Coords": [Coord1, Coord2] } 

$.post("/Demo/SaveZone", zoneData, function (resp) { 
    alert(resp); 
}, "json"); 





[HttpPost] 
public ActionResult SaveZone(ZoneViewModel zvm) 
{ 
    Zone z; 

    z = AutoMapper.Mapper.Map<ZoneViewModel, Zone>(zvm); 

    _db.Zone.Attach(z); 
    _db.SaveChanges(); 

    return View(); 
} 


public class ZoneViewModel 
{ 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Color { get; set; } 

    public CoordViewModel[] Coords { get; set; } 

} 


public class CoordViewModel 
{ 
    public int Id { get; set; } 
    public int X { get; set; } 
    public int Y { get; set; } 

} 
+0

¿Ha descargado la fuente MVC, agregar una referencia de proyecto a ella y pasó por el código de enlace de modelo predeterminado? – redsquare

+0

puede mostrar el cuerpo de httppost dentro de firebug/fiddler – redsquare

Respuesta

13

Probablemente el más fácil sería utilizar una solicitud JSON:

var coord1 = { X: 100, Y: 200 }; 
var coord2 = { X: 300, Y: 400 }; 
var zoneData = { 
    Color: '#D8F834', 
    Name: 'new zone', 
    Coords: [ coord1, coord2 ] 
}; 

$.ajax({ 
    url: '/Demo/SaveZone', 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(zoneData), 
    success: function(resp) { 
     alert(resp); 
    } 
}); 

El método JSON.stringify serializa un objeto javascript en una cadena JSON. Está integrado en navegadores modernos como método nativo. Si desea admitir navegadores heredados que no tienen este método, debe incluir el script json2.js que comprueba si el navegador lo admite de manera nativa y, si no, proporciona una implementación.

Ahora todo debe unir correctamente:

enter image description here

y así es como la solicitud éxito se verá así:

enter image description here

+0

Hemos probado esto, y varios ajustes diferentes como este, y todavía sin suerte. Esos valores .X y .Y continúan publicando como ceros. –

+1

@Ben Finkel, y usaste el ** mismo código exacto ** como se muestra en mi respuesta? Porque acabo de probarlo en mi computadora y funcionó muy bien. Entonces me sorprende mucho cuando dice que no funciona. –

+0

Sí, veo tu pantalla y estoy confundido. Corté y pegué tu código y no tuve suerte. El mismo problema todavía. –

0

Mi suposición:

public List<CoordViewModel> Coords { get; set; } 

(Admito que esto es un tiro en la oscuridad)

+0

Buen pensamiento, sin embargo, no fue una suerte. ¡Gracias! –

+0

cambió mi respuesta ... ¿Ha intentado utilizar el objeto de la lista? –

+0

Había intentado ICollection pero no List. Ninguno de los dos funcionó bien. –

Cuestiones relacionadas