C# 如何获取更新数据库的按钮?

C# 如何获取更新数据库的按钮?,c#,asp.net-mvc,button,controller,asp.net-mvc-5,C#,Asp.net Mvc,Button,Controller,Asp.net Mvc 5,我有一个视图,其中在GridView中生成了要执行的项目清单。一个特殊的项目是状态。如果项目未完成,则会显示一个按钮,将项目标记为完成,并标记单击该按钮的人和时间: <td> @if (item.status.Equals("Done")) { @Html.DisplayFor(modelItem => item.status) } else {

我有一个视图,其中在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>
我对绑定和anon类型有点陌生,因此无论使用
new{item=item}
new{id=item.id}
new{item}
我都会得到:

“/”应用程序中出现服务器错误

找不到资源

描述:HTTP404。您正在寻找的资源(或其 依赖项)可能已被删除、名称已更改或 暂时不可用。请查看下面的URL并进行修改 确保它拼写正确

请求的URL:/检查表/更新

版本信息:Microsoft.NET Framework版本:4.0.30319; ASP.NET版本:4.6.81.0

我做错了什么?我如何做我想做的事?

onclick=“location.href=”…“
正在对一个不存在的方法进行get调用(您只有一个POST方法)

将视图更改为包含每个具有适当状态的项目的表单

else
{
  using (Html.BeginForm("Update", "Checklist", new { id = item.ID }))
  {
    @Html.AntiForgeryToken()
    <input type="submit" title="TestTitle" value="TestValue" />
  }
}

旁注:如果这些按钮所在的视图是
索引视图,那么您可以通过使用ajax发布值,然后更新DOM,用状态文本替换按钮,从而获得更好的性能。href
进行get调用。您需要为每个项目创建一个表单(它应该只发回对象的ID,而不是完整的模型)@StephenMuecke我认为您应该将它作为一个答案发回)需要删除@before use,否则它会很好地工作。谢谢你的解释;在我将核心功能用作概念验证之后,我将研究ajax,但是从用户的角度来看,让DOM用文本替换按钮比让页面刷新要好得多。
else
{
  using (Html.BeginForm("Update", "Checklist", new { id = item.ID }))
  {
    @Html.AntiForgeryToken()
    <input type="submit" title="TestTitle" value="TestValue" />
  }
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Update(int ID)
{
  // Get the model
  TaskItem model = db.TaskItems.Where(m => m.ID == ID).FirstOrDefault();
  // Update properties
  model.timestamp = DateTime.UtcNow;
  model.applied_by = System.Web.HttpContext.Current.User.Identity.Name;
  model.status = "Done";
  // Save and redirect
  db.Entry(model).State = EntityState.Modified;
  db.SaveChanges();
  return RedirectToAction("Index");
}