asp.net-mvc - 删除操作不会激活/触发 ASP.NET Core MVC
问题描述
删除操作上的 HttpPost 不会触发,但是当我显示内容时,HttpGet 似乎工作正常。但是,当我在删除操作上单击 HttpGet 时生成的以下路由地址几乎没有混淆:-
它不应该生成这样的链接:https://localhost:44394/Post/DeletePost/9
控制器:-
[HttpPost, ActionName("DeletePost")]
public async Task<IActionResult> ConfirmDelete(int id)
{
await _repository.DeletePostAsync(id);
return RedirectToAction(nameof(GetAllPosts));
}
[HttpGet("{id}")]
public async Task<IActionResult> DeletePost(int id)
{
var post = await _repository.GetPostById(id);
if(post == null)
{
return NotFound();
}
return View(post);
}
HttpGet 的剃刀视图:-
<div class="btn btn-outline-danger delete">
<a href="@Url.Action("DeletePost", "Post", new { id = p.Id })">Delete
</a>
</div>
Razor 页面 HttpPost:-
<div class="container">
<div class="row">
<div class="col-9">
<p>
@Model.Topic
</p>
<p class="timeStampValue" data-value="@Model.Published">
@Model.Published
</p>
<p>
@Model.Author
</p>
<section>
<markdown markdown="@Model.Content" />
</section>
</div>
</div>
<form asp-action="DeletePostAsync">
<input type="hidden" asp-for="Id" />
<button type="submit" class="btn btn-outline-danger">Delete</button>
</form>
<a href="@Url.Action("GetAllPosts", "Post")" class="btn btn-outline-secondary">Cancel</a>
</div>
路由:-
app.UseMvc(routes =>
{ routes.MapRoute(
name: "KtsPost",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "Post", action = "Index" },
constraints: new { id = "[0-9]+" });
});
解决方案
表单中的操作名称错误。您的代码应该是:
<form asp-action="DeletePost">
<input type="hidden" asp-for="Id" />
<button type="submit" class="btn btn-outline-danger">Delete</button>
</form>
推荐阅读
- android - Android:在添加有意图的事件时,在 Google 日历中显示错误的结束日期(实际日期的前一天)
- reactjs - 一个对象字面量在严格模式下不能有多个同名的属性
- c# - 如何通过键盘滚动面板?
- html - 无法使用 CSS 网格实现网格布局
- docker - 当我在主机中编辑时,Docker 容器中的文件没有更新
- java - 线程 main 中的异常:该类型的方法未定义
- javascript - 全局初始化 Javascript 类
- css - React 与 CSS 背景过滤器兼容吗?
- cassandra - Cassandra datastax 驱动程序的 Pentaho 问题
- node.js - 解压缩大文件(超过 4GB)时节点存档器“标题错误”