2010-10-15 2 views
12

public ActionResult DoSomething(string[] arr, bool someBool, int someInt) { }Invia matrice param con jQuery ajax/carico

cercando di chiamare il metodo di cui sopra da jQuery:

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

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

la paramater array è nullo, altri parametri sono bene. Che cosa sto facendo di sbagliato?

strumenti di sviluppo Chrome mostra i dati del modulo sia presentata nel

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

non è sicuro che cosa sta succedendo lì, ma non sembra giusto per me

risposta

27

Se si utilizza jQuery 1.4 potrebbe essere necessario impostare il parametro traditional a true per essere compatibile con il formato del raccoglitore modello predefinito in 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 se si preferisce il metodo .load():

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

sì, è così. In realtà ho già riscontrato questo problema, ma mi ero dimenticato fino a quando questa risposta non mi ha ricordato. – fearofawhackplanet

+1

Grazie per l'esempio usando 'load' invece di 'ajax'. –

+0

Lo stesso problema si verifica con Java Struts2 e questa correzione è valida anche per Struts2 –

1

Basta togliere []

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

valori iscritti (controlla con Firebug).

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

rimuovere le staffe non farlo funzionare , Ho già provato senza. Nota che la documentazione di jQuery fornisce l'esempio con parentesi, quindi presumo che sia il modo corretto: '$ (" # objectID "). Load (" test.php ", {'choices []': [" Jon "," Susan "]});' – fearofawhackplanet

0

Anche stavo affrontando l'errore, nel passare matrice da pagina HTML alla pagina aspx.

il mio requisito era quello di caricare la pagina di aspx in un tag DIV della pagina html. sul caricamento della pagina ho bisogno di passare questi valori dell'array JS al caricamento della pagina aspx.

utilizzato il metodo seguente.

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

In aspx evento di caricamento della pagina posso accedere a questi valori:

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

Grazie a jQuery documentazione API enter link description here e StackOverflow