要使用jquery post发送的数组

要使用jquery post发送的数组,jquery,asp.net-mvc-2,Jquery,Asp.net Mvc 2,我试图用$.post向我的方法发送一个数组,但我有点不知所措 我正在获取表单之外的复选框的值,并将它们传递到我的方法中 我试图使用.serializeArray&.serialize,但得到的错误是 list.serializeArray不是函数 我只发送数组,得到空值。 HTML 方法 public ActionResult PassArray(string[] value){//doing some logic here} serialize或serializeArray应应用于jQue

我试图用$.post向我的方法发送一个数组,但我有点不知所措

我正在获取表单之外的复选框的值,并将它们传递到我的方法中

我试图使用.serializeArray&.serialize,但得到的错误是

list.serializeArray不是函数

我只发送数组,得到空值。

HTML

方法

public ActionResult PassArray(string[] value){//doing some logic here}
serialize或serializeArray应应用于jQuery对象,而不是简单数组,例如:

var serialized_data = $form.serialize();
传递到$.post的数据应为:

数据随请求一起发送到服务器的映射或字符串

所以您应该更改PassArray方法参数。 您还可以在表单外部序列化数据:

var serialized_data = $('#container input:checkbox').serialize();
$“单击发布”。单击功能{ var$form=$this.最近的'form'; $.post$form.attr'action',$form.serialize,函数数据{ 警报“测试”; }; };

并将动作参数的名称更改为checkbox,因为这是您在表单中用作复选框名称的内容:

public ActionResult PassArray(string[] checkbox) {
    ...    
}
更新:

或者,如果只想发送复选框的值而不发送任何其他表单输入元素,则可能需要使用传统模式:

或:

然后:

public ActionResult PassArray(string[] value) {
    ...    
}

代码的其余部分很好。虽然我想知道,为什么在循环检查复选框并构建自己的数据时使用表单?这些复选框是否在表单中?即便如此,它是否为您保留了post链接?

您是否尝试过将列表包装到jQuery对象中$list.serialize?wrap只会为mem创建一个空对象,你可以编写你希望作为post数据发送的内容吗?但是复选框在我的表单之外,这就是Darin的工作原理,谢谢。为什么它可以使用$.ajax而不是$.post?@Dejan.S,因为在jquery1.4中,它们改变了参数序列化的方式。他们引入了传统的参数,允许您回退到旧的格式。但是这个参数可以用$.ajax方法指定。查看文档以了解关于具体更改内容的更多详细信息:这对我没有帮助,我的值在表单之外通常情况下,您发布的值应该是您发布的表单1,但这种情况并非如此,有时您希望从表单之外获取更多信息请参见上文如何在表单之外序列化。没有区别,你自己也试过了?我已经得到了答案,但这仍然是无效的,至少对我来说是无效的
public ActionResult PassArray(string[] checkbox) {
    ...    
}
$('#click_post').click(function () {
    var list = new Array();
    $('#container input[type="checkbox"]').each(function () {
        list.push($(this).val());
    });

    var $form = $(this).closest('form');
    $.ajax({
        url: $form.attr('action'),
        type: 'POST',
        traditional: true,
        data: { value: list },
        success: function(result) {
            alert('test');
        }
    });
});
$('#click_post').click(function () {
    var list = new Array();
    $('#container input[type="checkbox"]').each(function () {
        list.push($(this).val());
    });

    var $form = $(this).closest('form');
    $.post($form.attr('action'), $.param({ value: list }, true), function(result) {
        alert('test');
    });
});
public ActionResult PassArray(string[] value) {
    ...    
}
var list = new Array(); // This simply looks ugly
var list = []; //This is the best way to so it in js - both are the same though
//everything else seems fine.. now
var data = {value: JSON.stringify(list)}; // -> '[1,2,3]' and so on