【问题标题】:Deleting a Resource删除资源
【发布时间】:2015-05-14 13:54:18
【问题描述】:

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

【问题讨论】:

  • 你得到的响应状态码是什么?

标签: c# asp.net-mvc crud


【解决方案1】:

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

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

【讨论】:

  • 当我更新路线时,我会采取行动。但是,重定向不起作用。它不断地重定向回自己。就像它没有进入“GET”操作一样。
  • 尝试在操作方法上使用[FromBody]。如果它不起作用,则必须从 url 传递 id。
【解决方案2】:

你快到了。变化:

url: '/OrderController/Orders/',

url: '/Order/Orders/',

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

【讨论】:

  • 当我更新路线时,我会采取行动。但是,重定向不起作用。它不断地重定向回自己。就像它没有进入“GET”操作一样。
  • 您不能通过 AJAX 请求进行 HTTP 重定向。但这完全是另一个问题。
猜你喜欢
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
相关资源
最近更新 更多