【发布时间】:2018-12-24 10:11:46
【问题描述】:
单击复选框时,我正在尝试使用 ajax 发布到控制器。它应该更新现有对象。 我的两个问题是:
- 我无法成功调用控制器操作方法
- 只有列表中的第一项有点击事件
希望有人能帮忙
使用 ajax 的点击事件
$('#checkboxID').on('click', function () {
$.ajax({
url: '@Url.Action("Attending", "GuestBookings")',
type: 'POST',
data: JSON.stringify({
"cID": $(this).val('cID'), "eID": $(this).val('eID'), "check": $(this).is(':checked') ? 1 : 0
}),
success: function(result) {
alert("Succeeded post");
},
error: function(result) {
alert("Failed to post");
}
});
});
控制器 HttpPost
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Attending(string cID, string eID, string check)
{
if (ModelState.IsValid)
{
var guest = await _context.Guests
.Where(g => g.CustomerId.ToString() == cID && g.EventId.ToString() == eID).FirstOrDefaultAsync();
if (check == "0")
{
guest.Attended = false;
}
else
{
guest.Attended = true;
}
try
{
_context.Update(guest);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
}
}
return Json(true);
}
复选框
<tbody>
@foreach (var item in Model.GuestsBooked)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Surname)
</td>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.CheckBoxFor(modelItem => item.Attended, new { @id = "checkboxID", @cID = item.Id, @eID = Model.Id })
</td>
<td>
@Html.ActionLink("Details", "Details", "Customers", new { id = item.Id }) |
@Html.ActionLink("Unbook", "Delete", "GuestBookings", new { id = item.Id, eventId = Model.Id }) |
</td>
</tr>
}
</tbody>
【问题讨论】:
-
您没有将验证令牌传递给控制器,请参阅以下问题的已接受答案:stackoverflow.com/questions/4074199/…
-
您正在创建多个具有相同 ID 的复选框。将 checkboxID 设为类:@Html.CheckBoxFor(modelItem => item.Attended, new {@class= "checkboxID" } 然后使用 $('.checkboxID').on('click', function () { ... . 这应该可以解决问题 2。
标签: c# ajax asp.net-mvc