如何获取按钮来更新数据库
本文关键字:按钮 更新 数据库 获取 何获取 | 更新日期: 2023-09-27 18:14:24
我有一个视图,在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,因为我想做的是修改三列在DB:
[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:/Checklist/Update
版本信息:Microsoft .NET Framework Version:4.0.30319;ASP。净版: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" />
}
}
并将控制器方法修改为
[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");
}
旁注:如果这些按钮上的视图是Index
视图,那么你会得到更好的性能通过使用ajax发布值,然后只是更新DOM替换按钮与状态文本