使用jQuery ajax / load提交数组参数

时间:2010-10-15 12:57:47

标签: asp.net-mvc jquery load paramarray

public ActionResult DoSomething(string[] arr, bool someBool, int someInt) { }

尝试从jQuery调用上面的方法:

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

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

数组参数为空,其他参数都没问题。我做错了什么?

Chrome开发者工具会将表单数据显示为

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

不确定那里会发生什么但看起来不对我

4 个答案:

答案 0 :(得分:28)

如果您使用的是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) {
    // ...
});

答案 1 :(得分:1)

只需删除[]

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

发布值(使用Firebug进行检查)。

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

答案 2 :(得分:0)

你能看出这个问题是否与你的问题类似:

Passing an nested arrays to asp.net mvc using jQuery's $.ajax

答案 3 :(得分:0)

即使我在将数组从HTML页面传递到aspx页面时也面临错误。

我的要求是将aspx页面加载到html页面的DIV标记中。在页面加载我需要将这些JS数组值传递给aspx页面加载。

我用下面的方法。

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

在aspx页面加载事件中,我可以访问以下值:

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

感谢JQuery API文档enter link description here和stackoverflow