14

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

4 回答 4

29

如果您使用的是 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) {
    // ...
});
于 2010-10-15T13:19:57.473 回答
1

只需删除[]

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

发布值(使用 Firebug 检查)。

arr[]       dog
arr[]       cat
someBool    true
someInt     1
于 2010-10-15T13:12:12.193 回答
0

你能看看这个问题是否和你的相似:

使用 jQuery 的 $.ajax 将嵌套数组传递给 asp.net mvc

于 2010-10-15T13:14:20.987 回答
0

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

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

我用了下面的方法。

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

在 aspx 页面加载事件中,我可以通过以下方式访问此值:

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

感谢 JQuery API 文档在此处输入链接描述和 stackoverflow

于 2014-07-11T05:28:34.000 回答