2010-10-15 61 views
12

public ActionResult DoSomething(string[] arr, bool someBool, int someInt) { }提交陣列PARAM與jQuery AJAX /負載

試圖從jQuery的調用上述方法:

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

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

陣列paramater爲空,其他PARAMS都很好。我究竟做錯了什麼?

Chrome開發者工具顯示錶單數據被提交爲

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

不知道什麼在那裏發生的,但不正確的看向我

回答

27

如果您使用jQuery 1.4,你可能需要設置traditional參數到true,以便與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); 
    } 
}); 

,或者如果你喜歡.load()方法:

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

就是這樣。我之前實際遇到過這個問題,但卻忘記了,直到這個答案慢慢地記住了我的記憶。 – fearofawhackplanet 2010-10-15 13:33:50

+1

感謝使用'load'而不是'ajax'的例子。 – 2012-04-02 13:22:09

+0

同樣的問題發生在Java Struts2上,這個修復對Struts2也有好處 – 2014-07-14 19:14:54

1

只是刪除[]

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

發佈值(使用Firebug進行檢查)。

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

去掉括號不能使它工作,我已經試過了。儘管注意jQuery文檔給出了括號的例子,所以我認爲這是正確的方法:'$(「#objectID」)。load(「test.php」,{'choices []':[「Jon」,「Susan 「]});' – fearofawhackplanet 2010-10-15 13:22:26

0

連我自己都面臨着錯誤,在傳球達陣,從HTML頁面aspx頁面。

我的要求是在html頁面的DIV標籤中加載aspx頁面。在頁面加載時,我需要將這些JS數組值傳遞給aspx頁面加載。

我用下面的方法。

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

在aspx頁面加載事件,我可以訪問該值:

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

由於JQuery的API文檔enter link description here和計算器