我想更新数据库时,有人检查一个代表行上的位字段的框。我一直都会响起这样一个问题:Ajax.ActionLink(...) with checkbox 这是我在CSHTML文件代码:如何使一个asp.net mvc复选框触发一个动作?
@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。 – haim770
有很多方法可以解决这个问题,但是当您选中该框时,您需要做某些事情来对服务器端点执行AJAX调用(可能是Web API方法,因为您使用的是ASP.net MVC)。 “quick and dirty”的答案是为你使用一个jQuery选择器,并使用$([selector])注册一个函数。您也可以将复选框绑定到kendo viewmodel函数或任何其他方法。 –
你也可以看看这里:http://stackoverflow.com/questions/1784412/asp-net-mvc-simulating-autopostback-for-simple-checkbox –