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