2016-09-14 7 views
1

Я использую a, чтобы вызвать действие API через вызов $ ajax, но, похоже, он вообще не вызывает api, и когда кнопка нажата, сообщение об ошибке просто появляется. Что мне не хватает/не так?
Вот Посмотреть и встроенный Аякса:Почему мой mvc ajax не находит действие

  <a href="@Url.Action("SingleOrderView","Cailz", new{ ID = item.ID})">View</a> 
       <a href="#" class="js-refuse-order" data-order-id="@item.ID">Refuse</a> 
      </div> 
     </div> 
    </li> 
</ul> } @section scripts 
{ 
<script> 
    $(document).ready(function() { 
     $(".js-refuse-order").click(function (e) { 
      var link = $(e.target); 
      if (confirm("Are you sure that you want to refuse this order?")) { 
       $.ajax({ 
        url: "/api/cailz/" + link.attr("data-order-id"), 
        method: "POST" 
       }) 
       .done(function() { 
        link.parents("li").fadeOut(function() { 
         $(this).remove(); 
        }); 
       }) 
       .fail(function() { 
        alert("Something went wrong " + link.attr("data-order-id")) 
       }); 
      } 
     }) 
    }) 
</script> 

А вот соответствующий API:

using CailzMk2.DataLayer; 
using System.Linq; 
using System.Web.Http; 
using CailzMk2.Models; 

namespace CailzMk2.API 
{ 
    [Authorize] 
    public class CailzController : ApiController 
    { 
     private ApplicationDbContext _context; 

     public CailzController() 
     { 
      _context = new ApplicationDbContext(); 
     } 

     [HttpPost] 
     public IHttpActionResult Refuse(int id) 
     { 
      var refusedOrder = _context.Orders.Single(o => o.ID == id); 
      refusedOrder.OrderRefused = true; 
      _context.SaveChanges(); 
      return Ok(); 
     } 
    } 
} 

Я боролся с этим в течение некоторого времени.

Функция вызывается нажатием кнопки, и появляется правильный идентификатор. Все, о чем я могу думать, это то, что он не может его найти.

А вот маршрут Config, просто конфигурация по умолчанию:

namespace CailzMk2 
{ 
    public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 
} 

ответ

0

Ваш URL (в вызове Ajax), как представляется, неверно, так как она не имеет компонент действия. Это должно быть что-то вроде этого:

url: "/api/Cailz/Refuse/" + link.attr("data-order-id"), 
method: "POST" 

Кроме того, вы должны использовать [HttpPost] на действие вместо [HttpDelete] для последовательности.

+0

Это было первое, что я пробовал, прежде чем отправил. Я попробовал еще раз, и он все еще не прошел. –

+0

Что именно вы пробовали: изменили на '[HttpPost]' или изменили URL? URL-адрес более важен, и если он не влияет на ваши действия, вам нужно проверить, что делает Маршрутизация. Мой ответ предполагает, что соответствующая маршрутизация является значением по умолчанию, которое возникает при создании проекта MVC; т.е. 'api/{controller}/{action}/{id}' –

+0

Да, URL. Я также проверил маршрутизацию, которая должна соответствовать используемой мне маршрутизации. Я использовал маршрутизацию по умолчанию. –