2010-10-15 19 views
12

public ActionResult DoSomething(string[] arr, bool someBool, int someInt) { }Enviar gama parámetro con jQuery ajax/carga

tratando de llamar al método anterior de jQuery:

var test = []; 
test.push('dog'); 
test.push('cat'); 

$container.load('MyController/DoSomething', 
       { 'arr[]': test, 'someBool': true, 'someInt': 1 }, 
       function(response, status, xhr) { 
        // ... 
       }); 

el parámetro de matriz es nulo, otros parametros están bien. ¿Qué estoy haciendo mal?

Chrome herramientas de desarrollo muestra los datos del formulario se presenten como

arr%5B%5D%5B%5D:dog 
arr%5B%5D%5B%5D:cat 
someBool:true 
someInt:1 

no está seguro de lo que pasa allí, pero no se ve bien para mí

Respuesta

27

Si está utilizando jQuery 1.4 es posible que deba establecer el parámetro traditional a true para ser compatible con el formato de carpeta de modelo predeterminado en ASP. NET MVC:

var test = []; 
test.push('dog'); 
test.push('cat'); 

$.ajax({ 
    url: 'MyController/DoSomething', 
    type: 'GET', 
    traditional: true, 
    data: { arr: test, someBool: true, someInt: 1 }, 
    success: function(result) { 
     $container.html(result); 
    } 
}); 

o si lo prefiere el método .load():

var data = { arr: test, someBool: true, someInt: 1 }; 
$container.load('MyController/DoSomething', $.param(data, true), 
    function(response, status, xhr) { 
    // ... 
}); 
+0

sí, eso es todo. De hecho, me he encontrado con este problema antes, pero lo había olvidado hasta que esta respuesta me refrescó la memoria. – fearofawhackplanet

+1

Gracias por el ejemplo usando 'cargar' en lugar de 'ajax'. –

+0

El mismo problema ocurre con Java Struts2 y este arreglo también es bueno para Struts2 –

1

Basta con retirar []

{ 'arr': test, 'someBool': true, 'someInt': 1 }, 

valores POST (revisando con Firebug).

arr[]  dog 
arr[]  cat 
someBool true 
someInt  1 
+0

eliminación de los corchetes no hace que funcione , Ya lo intenté sin. Aunque tenga en cuenta que la documentación jQuery da el ejemplo entre corchetes, entonces supongo que es la forma correcta: '$ (" # objectID "). Load (" test.php ", {'choices []': [" Jon "," Susan "]});' – fearofawhackplanet

0

Incluso me enfrentaba a error, al pasar matriz a partir de la página HTML a la página aspx.

mi requisito era cargar la página aspx en una etiqueta DIV de la página html. en la carga de la página, necesito pasar estos valores de matriz JS a la carga de página aspx.

utilicé el siguiente método.

$('#<divTagID>').load("Targetpage.aspx",{"Arr":JSArrValues});

En caso de carga de la página aspx puedo acceder a estos valores como:

string results = Response["Arr[]"];

Gracias a jQuery documentación de la API enter link description here y stackoverflow