1
我正在使用a通過$ ajax調用來調用API動作,但它似乎根本沒有調用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 }
);
}
}
}
這是我在發佈之前嘗試的第一件事。我再次嘗試,但仍然沒有通過。 –
你究竟做了什麼:更改爲[HttpPost]或更改URL? URL更重要,如果它沒有觸及你的動作,那麼你需要檢查路由是幹什麼的。我的答案假定相關路由是MVC項目創建時的默認值;即'api/{controller}/{action}/{id}' –
是的,URL。我還檢查了路由,它應該符合我使用的路由。我正在使用默認路由。 –