Estoy intentando, y luchando, enviar una matriz a través de JSON a una acción del controlador MVC.
Esto es lo que tengo y lo que he intentado …
//Get checked records var $checkedRecords = $(':checked'); //eg 3 rows selected = [input 4, input 5, input 6] //Have tried following: sendingVar: $checkedRecords.serializeArray(); // gives array of 0's sendingVar: JSON.stringify($checkedRecords); // gives "{\"length\":1,\"prevObject\":{\"0\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"context\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"length\":1},\"context\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"selector\":\":checked\",\"0\":{}}"...wtf //Post $.post(url, { sendingVar: sendingVar }, function(data) {alert(data); });
Cómo lo hago ?
edit: para aquellos que sugieren enviar $checkedRecords
“tal cual” desde la línea superior, eso no funciona. Me sale una extraña excepción en algún lugar del framework jquery 🙁
uncaught exception: [Exception... "Could not convert JavaScript argument" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: http://.../.../.../jquery-1.4.4.min.js :: :: line 141" data: no]
lo que creo que significa que está intentando asignar nulo a algo que no puede.
Edición: estoy usando MVC2 no 3
Edit2: Después de la respuesta de @ Monday, el problema se debe a cómo he creado la matriz como [input 4, input 5, input 6]
y no [4,5,6]
. Cualquier idea de cómo puedo obtener los valores en el matriz en su lugar?
Edit3: dejar de votar duplicar cuando no lo es. ¿Realmente leíste mi problema o leíste los problemas vinculados? Este es un problema diferente
@Daveo:
No quiero incorporar un atributo personalizado de reemplazo solo para enviar una matriz desde JSON, eso es ridículo, ya que hemos cubierto esta pregunta, no es necesario.
MVC3 – irrelevante
Aquí está mi demo, use mvc2, espero que ayude ~
La clave del éxito es tradicional.
establece el parámetro traditional
en verdadero
$(function(){ var a = [1, 2]; $.ajax({ type: "POST", url: "<%= ResolveUrl("~/Home/PostArray/") %>", data: {orderedIds: a}, dataType: "json", traditional: true, success: function(msg){alert(msg)} }); })
Desde jquery 1.4, este parámetro existe porque el mecanismo para serializar objetos en parámetros de consulta ha cambiado.
y la acción es ~
[HttpPost] public ActionResult PostArray(int[] orderedIds) { return Content(orderedIds.Length.ToString()); }
También puede usar JSON.stringyfy
para enviar los datos como una cadena y luego usar la JavaScriptSerializer class
para recuperar los datos.
En el código C #, para obtener los datos, se verá así:
JavaScriptSerializer js = new JavaScriptSerializer(); js.Deserialize(string paramiter);