2010-10-15 60 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和计算器