如何使用 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 可能需要编辑配置文件
我正在尝试使用 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 可能需要编辑配置文件