为什么我的mvc ajax没有找到行动

时间:2016-09-14 23:04:19

标签: javascript jquery ajax asp.net-mvc

我使用a通过$ ajax调用来调用API操作,但它似乎根本没有调用api,当单击该按钮时,就会出现失败消息。我错过了什么/做错了什么? 这是View和嵌入式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();
         }
     } 
 }

我一直在努力解决这个问题。

按下按钮调用该功能,确实输入了正确的ID。我能想到的只是找不到它。

这是一个路径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 }
            );
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的URL(在Ajax调用中)似乎不正确,因为它没有action组件。它应该是这样的:

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

此外,您应该在操作上使用[HttpPost]而不是[HttpDelete]来保持一致性。