2

各レコードにチェックボックスがある ASP.NET MVC 4 ビューに複数のレコードを表示しています。ユーザーが複数のレコードを (チェックボックスをオンにして) 選択し、[削除] ボタンをクリックして削除できるようにしたいと考えています。これまでのところ、jquery ajax を介して Delete 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"]ましたが、以下の回答で指定されているようにデータを渡すと、まだnullになりますdata: { deleteservice: servicesCheckboxes }。私も試しdata: [1,2]ましたが、まだアクションメソッドはアクションメソッドでnullを示していますdeleteservice

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

最後にそれが機能しました。ここでcontentType説明されているように、「MVCは受信したデータの種類を検出します」ので、次の変更を加えました$.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 に答える