删除资源

时间:2015-05-14 13:54:18

标签: c# asp.net-mvc crud

我有一个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操作中使用删除操作。

2 个答案:

答案 0 :(得分:1)

可能你的url错了。您不需要在类上指定sufix Controller,并且根据路由表获取正确URL的最佳方法是使用Url中的View属性。

Anoth point是您的异步​​请求(删除操作方法)返回重定向,您应该在客户端处理它,因为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" });
}

答案 1 :(得分:0)

你快到了。变化:

url: '/OrderController/Orders/',

url: '/Order/Orders/',

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