如何使用 ajax 和 ASP.NET MVC 删除?

How to delete with ajax and ASP.NET MVC?

我正在尝试使用 ajax 向 ASP.NET MVC 5 框架发送删除请求。 有一个页面只有一个红色按钮。

在客户控制器中:

[HttpDelete]
[Route("^/customers/delete/{id:int}")]
public ActionResult Delete(int id)
{
   CarDealerContext ctx = new CarDealerContext();
   // Delete customer with given id...
   // If I get a get a breakpoint in here I will be a happy camper!
   return View();
}

在路由配置中:

  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  routes.MapMvcAttributeRoutes();

在视图中我只有:

<input id="deleteBtn" class="btn btn-danger" type="button" 
    value="Delete" data-id="1"/>

这是我在单击 deleteBtn 时使用的脚本:

// The script is loaded after Bootstrap and jQuery.

 $("#deleteBtn").on("click", function (event) {
     event.preventDefault();
     var id = $("#deleteBtn").attr("data-id");
     $.ajax({
        url: "/customers/delete/" + id,
        type: 'delete',
        data: { id: id }
     });
 })
 // The request sends http://localhost:61402/customers/delete/1
 // and the response is 404...

我只想激活 CustomersController 中的 Delete 方法。 我已经尝试了 Route(regex) 属性中的几乎所有内容。 第二个我将方法更改为 [HttpGet] 它起作用了。 也希望能有关于该主题的良好学习资源。

按如下方式更改您的操作方法:

[HttpGet]
public ActionResult Delete(int id)
{
    //Your Code
}

注意两点:

1) 您应该设置 HTTPGet 注释而不是 HTTPDelete,因为您从视图发送的请求是 GET 请求,而不是通常理解为删除操作类型请求的请求。

2) 在你的情况下这可能不是必需的,但我想无论如何我都会提到它。 ASP.NET MVC 更喜欢约定而不是配置。您不需要明确设置该路线。 RouteConfig 文件中的默认路由将指向您的方法。

这将是 RouteConfig 文件中的默认配置:

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = request to this Action Method (if you don't have it, it's probably a good idea UrlParameter.Optional }
            );

您需要在 IIS 中启用这些动词(放置、删除)

Iisexpress 可能需要编辑配置文件