2016-09-14 9 views
1

$ ajaxコールでAPIアクションを呼び出すためにaを使用していますが、apiを呼び出しているようではなく、ボタンをクリックすると、失敗メッセージが表示されます。私は何が間違っている/間違っていますか?ここ
は、ビューと組み込みAJAXです:私の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(); 
     } 
    } 
} 

私はしばらくの間これで苦労してきました。

ファンクションはボタンを押すと呼び出され、正しいIDが入力されます。私が考えることができるのは、それが見つからないということだけです。

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呼び出しで)それがアクションコンポーネントを持っていないと正しくないと表示されます。ここ

とは、ルートConfigを、単にデフォルトの設定です。

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

また、あなたが一貫性を保つために代わり[HttpDelete]のアクションに[HttpPost]を使用する必要があります。それはこのようなものでなければなりません。

+0

私が投稿する前に、これが最初に試したことでした。私はそれをもう一度試みた、そしてそれはまだ通り過ぎなかった。 –

+0

あなたは '[HttpPost]'に変更したり、URLを変更したりして、正確に何をしようとしましたか? URLがより重要であり、あなたの行動に当てはまらない場合は、ルーティングが何をしているかを確認する必要があります。私の答えは、MVCプロジェクトが作成されるときに、関連するルーティングがデフォルトであると仮定しています。すなわち、 'api/{controller}/{action}/{id}' –

+0

はい、URLです。また、ルーティングをチェックしました。これは、使用したルーティングに準拠する必要があります。私はデフォルトのルーティングを使用していました。 –

関連する問題