删除资源
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" });
}
我有一个 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" });
}