删除资源

Deleting a Resource

我有一个 ASP.NET MVC 应用程序。我需要删除一条记录。在我的控制器中,我有一个看起来像这样的动作:

[HttpGet]
public ActionResult Orders() 
{
  return View();
}

[HttpDelete]
public ActionResult Orders(int orderId)
{
  return RedirectToAction("Orders", new { d = "true" });
}

在我看来,我有:

<button type="button" class="btn btn-link" onclick="return deleteOrder(@order.OrderId);">Delete Order</button>

function deleteOrder(id) {
  if (confirm('Are you sure you want to delete?')) {
    $.ajax({
      url: '/OrderController/Orders/',
      type: 'DELETE',
      data: {
        orderId: id
      }
    });
  }
  return false;
}

奇怪的是,使用这种方法永远不会达到 [HttpDelete] Orders。我不确定如何让删除操作在 MVC 操作中起作用。

你快到了。变化:

url: '/OrderController/Orders/',

url: '/Order/Orders/',

Controller 是一个 ASP.NET MVC 约定,它不包含在 url.

可能你的url是错误的。您不需要在 class 上指定后缀 Controller 并且根据路由表获得正确 url 的最佳方法是使用 Url 属性在 View

Anoth point is your async request (delete action method) returns 一个重定向,你应该在客户端处理它,因为 jquery 不会重定向客户端。你可以试试这个:

在客户端

 $.ajax({
      url: '@Url.Action("Orders", "Order")',
      type: 'DELETE',
      data: {
        orderId: id
      },
      success: function(data) {
          if (data.success) {
             window.location.href = data.redirectUrl;
          }
      }
 });

在服务器端:

[HttpDelete]
public ActionResult Orders([FromBody]int orderId)
{
   // check if it is an async request
  if (Request.IsAjaxRequest)
  {
     return Json(new { success = true, urlRedirect = Url.Action("Orders", new { d = "true "});
  }

  return RedirectToAction("Orders", new { d = "true" });
}