2

我在我的 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],但 action 方法仍然显示 null for deleteservicein action 方法。

4

2 回答 2

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 });
}
于 2013-01-28T21:25:10.063 回答
0

终于让它工作了。“MVC 检测它接收的数据类型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 {
    }    
  }
});    
于 2013-01-29T09:09:41.063 回答