首页 > 解决方案 > 删除操作不会激活/触发 ASP.NET Core MVC

问题描述

删除操作上的 HttpPost 不会触发,但是当我显示内容时,HttpGet 似乎工作正常。但是,当我在删除操作上单击 HttpGet 时生成的以下路由地址几乎没有混淆:-

https://localhost:44394/9

它不应该生成这样的链接: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]+" });
      });

标签: asp.net-mvcasp.net-web-apirazor

解决方案


表单中的操作名称错误。您的代码应该是:

<form asp-action="DeletePost"> 
    <input type="hidden" asp-for="Id" />
    <button type="submit" class="btn btn-outline-danger">Delete</button>
</form>

推荐阅读