【发布时间】:2021-08-29 09:54:11
【问题描述】:
删除未触发的动作,即使其他所有动作都正常工作。 我得到 405 或 404 输出。当然,Id 不为空,很多不同的输入。 可能是什么问题?
这是我的控制器:-
public IActionResult Delete(int? id){
if (id == null || id == 0) {
return NotFound();
}
var obj = _db.Expense.Find(id);
if (obj == null){
return NotFound();
}
return View(obj);
}
// POST Delete
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult DeletePost(int? id){
var obj = _db.Expense.Find(id);
if (obj == null){
return NotFound();
}
_db.Expense.Remove(obj);
_db.SaveChanges();
return RedirectToAction("Index");
}
这是我的观点 没什么特别的,只是像往常一样调用 POST 动作。 :-
@model InAndOut.Models.Expense
<form method="post" asp-action="DeletePost">
<input asp-for="Id" hidden />
<div class="border p-3">
<div class="form-group row">
<h2 class="text-black-50 pl-3">Delete Expense</h2>
</div>
<div class="row">
<div class="col-12">
//here is form
<div class="form-group row">
<div class="col-8 offset-2 row">
<div class="col">
<input type="submit" class="btn btn-danger w-75" value="Delete" />
</div>
<div class="col">
<a asp-action="Index" class="btn btn-success w-75">Back</a>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
这是我默认的 MVC 路由:-
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
【问题讨论】:
-
数据库很可能没有这样的 id,它返回 null。或者您的 id 也无效或为空。用断点检查它
-
删除按钮在哪里?
标签: c# asp.net-core-mvc crud .net-5