【发布时间】:2015-09-24 23:51:38
【问题描述】:
我有一个视图,其中在 GridView 中生成清单以执行项目。一个特定的项目是状态。如果项目未完成,则会显示一个按钮以将项目标记为已完成,并标记谁单击了该按钮以及何时:
<td>
@if (item.status.Equals("Done"))
{
@Html.DisplayFor(modelItem => item.status)
}
else
{
<input type="button" title="TestTitle" value="TestValue" onclick="location.href='@Url.Action("Update", "Checklist", new { item = item})'" />
}
</td>
我从脚手架编辑中获取代码,并在我的 ChecklistController 中稍微修改它,因为我想要做的就是修改数据库中的三列:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Update([Bind(Include = "ID,ww,taskitem,owner,manager,project,status,applied_by,timestamp")] TaskItem taskItem)
{
taskItem.timestamp = DateTime.UtcNow;
taskItem.applied_by = System.Web.HttpContext.Current.User.Identity.Name;
taskItem.status = "Done";
if (ModelState.IsValid)
{
db.Entry(taskItem).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View("Index", db.TaskItemSet.ToList());
}
我对绑定和匿名类型有点陌生,所以无论使用new { item = item}、new { id = item.id} 或new {item},我都明白:
“/”应用程序中的服务器错误。
找不到资源。
描述:HTTP 404。您正在寻找的资源(或其之一 依赖项)可能已被删除,名称已更改,或者是 暂时不可用。请查看以下 URL 并制作 确保拼写正确。
请求的 URL:/Checklist/Update
版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.6.81.0
我做错了什么,我该如何做我想做的事?
【问题讨论】:
-
location.href进行 GET 调用。您需要为每个项目创建一个表单(它应该只发回对象的 ID,而不是完整的模型) -
@StephenMuecke 我认为您应该将其发布为答案)
标签: c# asp.net-mvc button controller asp.net-mvc-5