如何编写复选框的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"); }
如果您只想一次更新一个,那么您的控制器方法需要具有对象ID
和Status
属性的参数
[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)