2010-10-15 13 views
12

public ActionResult DoSomething(string[] arr, bool someBool, int someInt) { }Prześlij tablicy param z jQuery ajax/obciążenia

próby wywołania powyższy sposób z jQuery:

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

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

paramater tablicy jest null, inne params są w porządku. Co ja robię źle?

Narzędzia dla programistów Chrome pokazuje dane formularzy zostaną przedłożone jako

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

nie wiem, co się dzieje tam, ale nie wygląda prawo do mnie

Odpowiedz

27

Jeśli używasz jQuery 1.4 może trzeba ustawić parametr traditional do true, aby być zgodnym z domyślnym formatem segregatorów w 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); 
    } 
}); 

lub jeśli wolisz metodę .load():

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

tak to wszystko. Rzeczywiście natknąłem się na ten problem, ale zapomniałem, dopóki ta odpowiedź nie pobudziła mojej pamięci. – fearofawhackplanet

+1

Dzięki za przykład przy użyciu "obciążenia" zamiast "ajax". –

+0

Ten sam problem występuje z Java Struts2 i ta poprawka jest również dobra dla Struts2 –

1

Wystarczy usunąć []

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

Opublikowane wartości (sprawdzanie za pomocą Firebuga).

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

usuwanie nawiasów nie robi to działa , Już próbowałem bez. Należy zauważyć, że dokumentacja jQuery podaje przykład w nawiasach, więc zakładam, że jest to poprawna metoda: '$ (" # objectID "). Load (" test.php ", {'choices []': [" Jon "," Susan "]});' – fearofawhackplanet

0

nawet ja został skierowany błąd, przechodząc tablicę od strony HTML do strony aspx.

moim wymaganiem było załadowanie strony aspx w tagu DIV strony html. na ładowanie strony muszę przekazać te wartości tablicy JS do załadowania strony aspx.

Użyłem poniższej metody.

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

W przypadku obciążenia strona aspx mogę uzyskać dostęp do tej wartości, jak:

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

Dzięki JQuery dokumentacji API enter link description here i stackoverflow