2016-07-19 8 views
1

私は剃刀のビューに2つの配列を持っています。最初のチェックボックスはチェックボックスにチェックされ、2番目のチェックボックスはチェックされません。私はそれらの1つを送ることができますが、私は両方を送る方法を知らない。これは私のjQueryのコードです:MVC.NETでjQueryを使って複数の配列を送信するには?

$(document).ready(function() { 
    $("#checkAll").click(function() { 
     $(".checkBox").prop('checked', $(this).prop('checked')); 
    }); 
    $("#confrim").click(function() { 
     var selectedIDs = new Array(); 
     var unseletedeIDs = new Array(); 
     $('input:checkbox.checkBox').each(function() { 
      if ($(this).prop('checked')) { 
       selectedIDs.push($(this).val()); 
      } else { 
       unseletedeIDs.push($(this).val()); 
      } 
     }); 
     var options = {}; 
     options.url = "/Parts/ConfrimAll"; 
     options.type = "POST"; 
     options.data = JSON.stringify(selectedIDs); 
     options.contentType = "application/json"; 
     options.dataType = "json"; 
     options.success = function(msg) { 
      alert(msg); 
     }; 
     options.error = function() { 
      alert("Error!"); 
     }; 
     $.ajax(options); 
    }); 
}); 

これはアクションです:

public ActionResult ConfrimAll(int?[] selectedIDs, int?[] unSelectedIDs) 
    { 
     if (selectedIDs!=null) 
     { 
      foreach (int id in selectedIDs) 
      { 
       Part obj = db.Parts.Find(id); 
       obj.IsOk = true; 
       db.Entry(obj).State = EntityState.Modified; 
      } 
     } 
     if (unSelectedIDs!=null) 
     { 
      foreach (int id in unSelectedIDs) 
      { 
       Part objs = db.Parts.Find(id); 
       db.Parts.Remove(objs); 
      } 
     } 
     db.SaveChanges(); 
    return Json("yes"); 
} 

答えて

0

$.ajax呼び出しのdataパラメータに、オブジェクトの一部として両方の配列を指定できます。それはjQueryのは、それはそれをしないよう特殊文字をエスケープし、必要なフォーマットにあなたのためにそれをコードするようdataパラメータにオブジェクトを提供するために、より良い習慣だと

$("#confrim").click(function() { 
    var data = { 
     SelectedIDs: [], 
     UnSelectedIDs: [], 
    } 
    $('input:checkbox.checkBox').each(function() { 
     data[this.checked ? 'SelectedIDs' : 'UnSelectedIDs'].push(this.value); 
    }); 

    $.ajax({ 
     url: '/Parts/ConfrimAll', 
     type: 'POST', 
     data: data, 
     success: function(msg) { 
      console.log(msg); 
     }, 
     error: function(x, s, e) { 
      console.log('Error!'); 
      console.log(x, s, e); 
     } 
    }); 
}); 

注:これを試してみてください。

+0

私はこれが動作していないことを試します –

+0

これはあまり有用なフィードバックではありません。どのように動作しませんでしたか? ModelBinderが動作するように 'ConfrimAll'(sic)メソッドのプロパティを更新しましたか? –

+0

はいあなたのAREはconfrimallの方法をright.this:公共のActionResult ConfrimAll([] UnSelectedIDsをINT、[] SelectedIDsをINT) {foreachの(SelectedIDsのintのID) {パートOBJ = db.Parts.Find(ID) ; obj.IsOk = true; db.Entry(obj).State = EntityState.Modified; } foreach(UnSelectedIDsのint id) { パートobjs = db.Parts.Find(id); db.Parts.Remove(objs); } db.SaveChanges(); return Json( "はい"); } –

1

は、あなたはこれを試したことがありますか?

JSON.stringify({ selectedIDs: selectedIDs, unseletedeIDs: unseletedeIDs }); 

あなたはこのアクションでいっぱいに二つのパラメータselectedIDsunseletedeIDsを持っている必要があります。

+0

はい動作していません –

関連する問題