【发布时间】:2016-01-13 00:28:21
【问题描述】:
当有人选中代表行上位字段的框时,我想更新数据库。我一直在回答这个问题:Ajax.ActionLink(...) with checkbox 这是我在cshtml文件中的代码:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Macro_Name)
</td>
<td>
@Html.CheckBoxFor(modelItem => item.Claimed, new { id = item.Macro_Name, data_url = Url.Action("ToggleClaim", "MacroStatus")})
</td>
<td>
@Html.DisplayFor(modelItem => item.Date_Claimed)
</td>
<td>
@Html.DisplayFor(modelItem => item.Username)
</td>
<td>
@Html.DisplayFor(modelItem => item.Finished)
</td>
<td>
@Html.DisplayFor(modelItem => item.Date_Completed)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Macro_Name }) |
@Html.ActionLink("Details", "Details", new { id = item.Macro_Name }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Macro_Name })
</td>
</tr>
}
在 MacroStatusController 类中,我有以下操作:
public ActionResult ToggleClaim(string id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
MacroStatus macroStatus = db.MacroStatus1.Find(id);
if (macroStatus == null)
{
return HttpNotFound();
}
if (ModelState.IsValid)
{
macroStatus.Date_Claimed = DateTime.Now;
db.Entry(macroStatus).State = EntityState.Modified;
db.SaveChanges();
}
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
但是,当我选中或取消选中该框时,ToggleClaim 没有运行。没有编译错误。这是我第一次尝试使用 asp.net mvc,我做错了什么?
【问题讨论】:
-
data-url属性现在只包含一些 url。需要有一些 Javascript 使用它。 -
有很多方法可以解决这个问题,但是当您使用 AJAX 调用服务器端点(可能是 Web API 方法,因为您使用的是 ASP.net MVC)选中该框。 “快速而肮脏”的答案是为您使用 jQuery 选择器复选框并使用 $([selector]).change(function(){}); 注册一个函数;您还可以将复选框绑定到 kendo viewmodel 函数或任何数量的其他方法。
-
@EricBurcham 关键是在复选框更改时发送 ajax 请求。
-
@RezaAghaei - 我认为我的评论很清楚,但你是绝对正确的。
标签: c# asp.net-mvc checkbox