ASP.NET中的MVC操作引发404错误

本文关键字:错误 操作 NET 中的 MVC ASP | 更新日期: 2023-09-27 18:19:31

我必须向使用ASP.NET设计的现有应用程序添加一个delete方法,问题是我没有使用该方法的经验。以下是我所做的:

控制器

[HttpPost, Authorize(Roles = "Admin")]
public ActionResult TypeLotRemove(Guid id)
{
    TypeLot typeLot = _repository.GetTypeLot(id);
    //On supprime le type de lot à la base.
    _repository.RemoveTypeLot(typeLot);
    return RedirectToAction("TypeLot");
}

库存

public TypeLot RemoveTypeLot(TypeLot typeLot)
{
    _entities.RemoveToTypeLot(typeLot);
    _entities.SaveChanges();
    return typeLot;
}

Designer.cs

[global::System.CodeDom.Compiler.GeneratedCode("System.Data.Entity.Design.EntityClassGenerator", "4.0.0.0")]
public void RemoveToTypeLot(TypeLot typeLot)
{
    base.DeleteObject(typeLot);
}

查看

<%= Html.ActionLink("Supprimer","TypeLotRemove", new { id = item.ID} )%>

当我点击链接时,我被重定向到TypeLotRemove/420c039f-516e-40c5-916f-6da222eb50ae,所以我有一个404错误(正常原因是我没有TypeLotRemove文件),什么也没做。我错过了什么?

ASP.NET中的MVC操作引发404错误

问题是,当您用[HttpPost]动词修饰ActionMethod时,您只是在生成指向ActionMethod的链接。这意味着该ActionMethod只能通过POST请求来访问。

在这种情况下,使用[HttpPost]是有意义的,所以只需在您的视图中这样做:

@using(Html.BeginForm("TypeLotRemove", "Controller", FormMethod.Post)
{
   // Your form and submit
}

mstaesen在评论中还指出,您正试图再次访问URL /TypeLotRemove/1,这是一个GET请求,但您传递的参数(在本例中为1)不是您在ActionMethod 中需要的GUID

将方法TypeLotRemove 中的HttPost更改为HttpGet