2010-12-09 14 views
57

Me falta algo aquí. Tengo este jQuery JavaScript:jQuery Ajax matriz POSTing para controlador ASP.NET MVC

$.ajax({ 
    type: "POST", 
    url: "/update-note-order", 
    dataType: "json", 
    data: { 
     orderedIds: orderedIds, 
     unixTimeMs: new Date().getTime() 
    } 
}); 

Dónde orderedIds es una matriz de JavaScript número (por ejemplo var orderedIds = [1, 2]).

El manejo Controller método es:

[HttpPost] 
public void UpdateNoteOrder(long[] orderedIds, long unixTimeMs) 
{ 
    ... 
} 

Cuando pongo un Debugger.Break() en UpdateNoteOrder(), orderedIds es null en la ventana Inspección. (unixTimeMs, sin embargo, tiene un valor numérico.)

¿Cómo pasar la matriz a través $.ajax() número tal que orderedIds es un long[] en el controlador?

Respuesta

123

Sólo hay que establecer el parámetro traditional a true:

$.ajax({ 
    type: "POST", 
    url: "/update-note-order", 
    dataType: "json", 
    traditional: true, 
    data: { 
     orderedIds: orderedIds, 
     unixTimeMs: new Date().getTime() 
    } 
}); 

Dado que jquery 1.4 este parámetro existe porque el mecanismo para serializar objetos en parámetros de consulta ha cambiado.

+0

Desafortunadamente en mi aplicación Rails, obtengo el último elemento de la matriz. Verifiqué que el navegador está enviando la matriz correctamente. En el ejemplo anterior, reemplacé 'orderedIds: orderedIds' con' 'orderedIds []': orderedIds' para que funcione para Rails. –

+1

"tradicional" funcionó para mí. ¡Gracias! – Jake

+1

+1. Un salvavidas. – Todd

0

que necesita para convertir orderedId de parámetro en una matriz, o el controlador no lo verá

$.param({ orderedIds: orderedIds }); 

en el código:

$.ajax({ 
    type: "POST", 
    url: "/update-note-order", 
    dataType: "json", 
    data: { 
     orderedIds: $.param({ orderedIds: orderedIds }), 
     unixTimeMs: new Date().getTime() 
    } 
}); 
+2

Esto no funciona. En UpdateNoteOrder, orderedIds sigue siendo nulo. – AgileMeansDoAsLittleAsPossible

+0

si no funciona, primero verifique su código, esto se toma directamente de la documentación de jquery http://api.jquery.com/jQuery.param/ Puede asegurarse de estar en lo correcto antes de rechazar una respuesta –

+0

I puede confirmar también que esto no funciona (escribí una aplicación de muestra para probarlo). –

Cuestiones relacionadas