如何编写复选框的ajax事件以立即将值传递给控制器

如何通过单击复选框传递PGId的值并获取复选框的值以更新值。

我的视图显示从方法“索引”获得的列表

@model PagedList.IPagedList @using (Html.BeginForm("UpdateStatus", "PGProfile", FormMethod.Post)) { for (int i = 0; i < Model.Count; i++) {   @Html.DisplayFor(m => m[i].PGId) @Html.HiddenFor(m => m[i].PGId)   @Html.CheckBoxFor(m => m[i].Status)    }  // how can I write a ajax event of checkbox to pass value of PGId to controller </script 

我的控制器嵌套方法索引获取所有数据和方法Post UpdateStatus

  // bind all data and work fine public ActionResult Index() { var pgProfiles = _pgProfileService.GetAllPGProfiles().ToListViewModel(); return View(pgProfiles) } //update status by pgID [HttpPost] public ActionResult UpdateStatus(IEnumerable model) { foreach (var item in model) { var pgProfiles = _pgProfileService.GetPGProfileById(item.PGId); pgProfiles = item.ToEntity(pgProfiles); pgProfiles.PGId = item.PGId; _pgProfileService.UpdatePGProfile(pgProfiles); } return RedirectToAction("Index"); } 

如果您只想一次更新一个,那么您的控制器方法需要具有对象IDStatus属性的参数

 [HttpPost] public JsonResult UpdateStatus(int id, bool status) 

然后在视图中(注意CheckBoxFor()生成一个value="True"的复选框和一个value="false"的隐藏输入,这在您的情况下不是必需的)

 @foreach (var item in Model) {   @Html.DisplayFor(modelItem => item.PGId)   if(item.Status) {  }   } 

脚本

 var url = '@Url.Action("UpdateStatus", "YourControllerName")'; $('.status').click(function() { var id = $(this).val(); var status = $(this).is(':checked') ? 'true' : "false"; $.post(url, { id: id, status: status }, function(data) { // do something with any data you return? }); }); 

或者,为了避免多次调用,您只需提交表单并绑定集合(在用户进行了所有必需的更改后,没有javascript和一个调用)

 @model IList @using(Html.BeginForm()) { for(int i = 0; i < Model.Count; i++) {   @Html.DisplayFor(m => m[i].PGId)   @Html.HiddenFor(m => m[i].PGId) @Html.CheckBoxFor(m => m[i].Status)   }  } 

并发回

 [HttpPost] public ActionResult UpdateStatus(IEnumerable model)