【问题标题】:Deleting an object from index page while staying on the same page (MVC)从索引页面中删除对象,同时保持在同一页面上(MVC)
【发布时间】:2025-12-18 02:10:02
【问题描述】:

我正在尝试在 MVC 中显示项目列表,并在它们旁边显示一个删除操作链接。如果用户希望删除该项目,他只需单击它,就会发生以下操作: -> 项目被删除 -> 页面刷新

实际发生的情况如下: -> 项目被正确查看

点击删除时会发生什么? -> 链接更改为 /Home/Index/1 (转到正确的方法(删除) -> 页面没有刷新,项目没有被删除,但再次加载非常快,链接保持 /Home/Index/1

代码

 public ActionResult Index()
    {
        List<Flight> Flights = db.Flights.ToList();

        return View(Vluchten);
    }

    [HttpPost, ActionName("Delete")]
    public ActionResult Index(int id)
    {
        Flight flight = db.Flights.Find(id);
        db.Flights.Remove(flight);
        db.SaveChanges();
        return RedirectToAction("Index","Index");
    }

查看代码:

//Items are shown and this is the last <td>:
 @Html.ActionLink("Delete","Index", new { id=item.Id })

我的问题似乎出在哪里?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    您的 Delete 方法正在寻找 POST,ActionLink 正在寻找 GET。为了简化这一点,只需更改您的方法签名:

    public ActionResult Delete(int id)
    {
        ... do all the things ...
    
        return RedirectToAction("Index","Index");
    }
    

    然后是你的 ActionLink:

    @Html.ActionLink("Delete","Delete", new { id=item.Id })
    

    【讨论】:

    • 非常感谢!!我没有考虑 POST/GET 的事情!谢谢
    • 您不应该通过 GET 对服务器进行更改。 GET 应该是幂等的。您应该围绕每个创建一个表单,并且至少在 POST 执行,但是您应该使用 Delete 来确保语义正确。像这里*.com/questions/8835450/… 使用 GET 执行删除它的一个问题是,如果它在互联网上出现并且爬虫访问您的页面,它将删除表中的所有内容。
    • 不要这样做。使用@Html.BeginForm()(将 ID 添加为路由值)和提交按钮进行 POST。
    • 这个Q的上下文是关于路由的。在 GET 与 POST 中更改/删除数据是针对另一个时间/地点/问题。