控制器方法未被调用

A controller method is not called

我为我的站点编写了一些 jQuery 脚本,因此我的控制器方法将被执行 - 好吧,甚至没有调用该方法。似乎一切正常,只是控制器方法甚至没有被调用。

这是我的相关代码 - 按钮本身:

<a href="#" data-id="@product.Id" class="btn btn-info btn-lg" style="margin-left:60px">
    <span class="glyphicon glyphicon-shopping-cart"></span> Add to cart
</a><br />

jQuery脚本:

<script type="text/javascript">
$(".btn.btn-info.btn-lg").click(function(event)
{
      event.preventDefault();
      var url = '@Html.Raw(Url.Action("AddToCart", "Cart", new {idinput = "IDI",amount="AM"}))';
      url = url.replace("AM", $("#amounter").val());
      url = url.replace("IDI", $(this).data("id"));

      window.location.href = url;
});
</script>

请注意,我在名为 CartController 文件的控制器中有以下控制器方法:

[HttpPost]
public ActionResult AddToCart(int idinput, int amount)

按下按钮后,我到达:

http://localhost:59463/Cart/AddToCart?idinput=1&amount=44

好吧,我不确定它应该如何工作,但甚至没有调用控制器方法..

您正在通过设置 window.location.href 进行重定向,这是一个 GET 操作。您的控制器需要 POST。你应该做一个表格 post 或一些 ajax 来添加它。 GET 不是将东西添加到购物车的好方法。

该操作具有 HttpPost 属性,这意味着它只会响应 HTTP POST 请求。如果您只是尝试使用 window.location.href = url 访问 URL,它将改为执行 HTTP GET。所以你会得到一个 404.

从操作中移除 [HttpPost] 属性,或者让您的 Javascript 执行 POST 操作,这在语义上更符合 "add" 一个项目。

完整的解决方案

function AddToCart() {
        var url = "@Url.Action("AddToCart", "Cart")";
        var idinput = $("#idinput").val();
        var amount = $("#amount").val();
        var rate = {
            idinput: idinput,
            amount: amount
        };
        rate = JSON.stringify(rate);
        $.ajax({
        type: "POST",
        url: url,
        contentType: "application/json; charset=iso-8859-1",
        data: rate
      });
    }
public ActionResult AddToCart(Data Data)
{
   return Json("", JsonRequestBehavior.AllowGet);
}
public class Data
    {
        public int idinput { get; set; }
        public int amount { get; set; }
    }