使用jquery ajax传递多个Checkbox值

时间:2013-01-28 20:36:32

标签: asp.net-mvc jquery asp.net-mvc-4

我在ASP.NET MVC 4视图中显示多条记录,其中每条记录都有一个复选框。我希望用户能够选择多个记录(通过选中复选框)并单击“删除”按钮以删除它们。到目前为止,我可以通过jquery ajax调用Delete Action方法,但问题是我的action方法似乎不接受传递的数组。 这是我的jquery代码:

    $(function () {

    $.ajaxSetup({ cache: false });

    $("#btnDelete").click(function () {
        $("#ServicesForm").submit();
    });

    $("#ServicesForm").submit(function () {
        var servicesCheckboxes = new Array();            
        $("input:checked").each(function () {
            //console.log($(this).val()); //works fine
            servicesCheckboxes.push($(this).val());
        });

        $.ajax({
            url: this.action,
            type: this.method,
            data: servicesCheckboxes,
            success: function (result) {
                if (result.success) {


                    }
                    else {
                    }

                }
        });
        return false;

    });
});

这是我的行动方法:

[HttpPost]
public ActionResult DeleteServices(int[] deleteservice)
{
   if (deleteservice != null)
   {
     //no hit
   }
}

我错过了什么?

修改

我还在console.log(servicesCheckboxes);之前尝试了$.ajax()["3", "4"]输出data: { deleteservice: servicesCheckboxes }但在我按照下面data: [1,2]的答案中指定的方式传递数据时仍然为空。即使我尝试了deleteservice,但操作方法中的{{1}}操作方法仍显示为null。

2 个答案:

答案 0 :(得分:3)

只需将数组传递给您的操作:

$.ajax({
    url: this.action,
    type: this.method,
    dataType: "json"
    data: { deleteservice: servicesCheckboxes }, // using the parameter name
    success: function (result) {
        if (result.success) {
        }
        else {
        }    
    }
});

或者,只需使用serialize() jquery方法序列化表单中的所有字段:

$.ajax({
    url: this.action,
    type: this.method,
    dataType: "json"
    data: $(this).serialize(),
    success: function (result) {
        if (result.success) {
        }
        else {
        }    
    }
});

在您的控制器中:

[HttpPost]
public ActionResult DeleteServices(int[] deleteservice)
{
    bool deleted = false;
    if (deleteservice != null)
    {
        // process delete
        deleted = true;
    }   

   return Json(new { success = deleted });
}

答案 1 :(得分:0)

终于搞定了。 “MVC按照here的说明检测到contentType”接收的数据类型,因此我对$.ajax()进行了以下更改

$.ajax({
url: this.action,
type: this.method,
dataType: "json"
//data: { deleteservice: servicesCheckboxes }, // using the parameter name
data: JSON.stringify({ deleteservice: servicesCheckboxes }),
contentType: 'application/json; charset=utf-8',
success: function (result) {
    if (result.success) {
    }
    else {
    }    
  }
});