我有一个使用jQuery 1.3.2的ASP.NET MVC应用程序。
在几个页面上有一个网格,可让您选择多个项目,然后调用.load
加载项目的详细信息。
this.$container.load(this.url, data, function() {
// Show results
});
data
包含名为s
的数组,其中包含所选的ID。
s = [ "2", "1" ]
使用jQuery 1.3.2,data
将发布为
s 2
s 1
发送到
public ActionResult SomeAction(object[] s)
一切都很好。
我尝试将jQuery库更改为更新版本(1.5.1),现在我的控制器没有收到s
的值,因为jQuery正在发布data
,如下所示:
s[] 2
s[] 1
我是否需要分配索引以便控制器接收值(s[1], s[2]
)?我是否需要更改控制器操作的签名或生成数组的方式?现在,生成数据的javascript就是
var s = new Array();
for (var id in this._selected) {
// Some checks
s.push(id);
}
答案 0 :(得分:2)
如果它在1.3.2中有效,您应该能够通过设置jQuery.ajaxSettings.traditional = true
恢复旧行为。这是jQuery 1.4的一个变化,这个设置允许向后兼容。
有关详细信息,请参阅the manual entry for $.param
。
使用您的示例数据:
var data = {s: ["2", "1"]};
// jQuery 1.7
$.param(data); // "s%5B%5D=2&s%5B%5D=1"
jQuery.ajaxSettings.traditional = true;
$.param(data); // "s=2&s=1"
// jQuery 1.3.2
$.param(data); // "s=2&s=1"